2012-07-27 4 views
1

나는 웹 서버에서 아주 단순한 것을 달성하려고 노력 중이다. 예를 들어 www.example.net/something.php로 끝나는 .php로 끝나는 URL을 www.example.net/something 또는 www.example.net/folder/subfolder/something.php로 www가되게하고 싶습니다. example.net/folder/subfolder/something. 또한 나는 www.example.net/folder/something.php?something=whatever/이든 상관하지 않습니다. 나는 URL에서 마지막 .php를 제거하는 것에 만 관심이있다. 나는이 코드를 다른 많은 것들과 함께 사용했다.URL 끝에서 .php 파일 확장자 제거하기.

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 
RewriteRule (.*)/$ $1.php [L] 

그러나 일부 내 페이지에서만 작동합니다. 예를 들어 내 www.example.com/folder/contactus.php 페이지에서 작동하지 않습니다. 대신 404 페이지를 얻습니다. 그러나 www.example/folder/faq.php에서 완벽하게 작동합니다. 또한 내 코드의 여러 부분에서 일부 file_get_contents() PHP 요청을합니다. 내부 요청 (내 PHP 기능)이 영향을받지 않도록 이러한 규칙을 조정할 수있는 방법이 있습니까? 기본적으로 나는 브라우저가 .php 파일에 저장되어있는 다른 PHP 함수에 영향을주지 않고 .php 끝없이 URL을 표시하기를 원합니다. 내 의도를 더 명확히하기 위해 : 필자는 설정 한 변수를 기반으로 PHP 텍스트 파일의 특정 줄을 추출하는 문자열 처리 함수를 사용합니다. 현재 다시는 PHP 파일을 규칙으로 확장이 파일 이름에서 제거 되었기 때문에 그러나 메신저 추측 (찾을 수 없습니다.

$file_contents = file_get_contents($filename); 

나는 현재 공유 GoDaddy와 호스트 계정에 리눅스 서버를 사용하고 있습니다.

답변

0

난 당신이 모두 규칙에 PHP 검사를 적용 할 필요가 있다고 생각 :

RewriteCond %{REQUEST_URI} ^(.*)/$ 
RewriteCond %{DOCUMENT_ROOT}%1.php -f 
RewriteRule (.*)/$ $1.php [L] 

RewriteCond {REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

또한, -f 검사 슬래시 후행없이해야

+0

여전히 이상하게 작동합니다. 첫째, 내부 PHP 스크립트와 함수 호출은 그대로 유지됩니다. 그거 좋네. 그러나 그것은 여전히 ​​ 'http : // www.sitename.net/folder/something.php에 http : // www.sitename.net/folder/something.php' 와 같은 디렉토리에있는 다른 파일에 대해서 'http : //www.sitename.net/folder/something.php ~ http : // www.sitename.net/folder/something /' 이상하게도 페이지 중 하나가이 http : //www.sitename을 처리합니다. net/var/chroot/home/content/37/9179448/html/control/something'을 실행하면 내 404 페이지로 연결됩니다. 위의 정확한 코드가 내가 사용한 이유입니다. – jmreader

0

목 e는 다음과 같이 원하는대로 작동하지만 내 페이지 중 하나가 실패하여 요청을 받았습니다. 방금 게시물 요청으로 변경하고 모두 잘되었습니다.

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{THE_REQUEST} ^GET\ /([^.\ ]+\.)+php(\?[^\ ]*)?\ HTTP 
RewriteRule ^(.+)\.php$ http://www.sitename.net/$1 [R=301,L] 
RewriteRule ^([^/]+/)*index/?$ http://www.sitename.net/$1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ http://www.sitename.net/$1 [R=301,L] 
RewriteCond $1 !^([^.]+\.)+([a-z0-9]+)$ [NC] 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*[^/])$ /$1.php [L] 
RewriteRule (.*)/$ $1.php [L] 

하나의 작은 문제가 여전히 남아 있습니다. 일부 페이지는 뒤에 슬래시가 추가되고 다른 페이지는 추가되지 않습니다. 후행 슬래시를 강요하는 단서?

+0

하나의 큰 문제가 있습니다. 모든 POST 양식 제출은 404 페이지를 반환합니다. 몇 가지 이유로 게시 양식 제출을 해결할 수 없습니다. – jmreader