2009-11-04 2 views
2

.php 확장자를 숨기기 위해 모든 URL을 다시 쓰려고합니다. 나는이 규칙이mod_rewrite로 .php 제거

  • 가 추가 한 후 URL
  • 와 일치하는 파일이나 디렉토리가 없다는 사실에 조건부되고 싶어, 그래서하지 않을 것이다 분명 .php모든 URL을 추가하는 일반적인 규칙

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}.php -f 
    RewriteRule ^(.*)$ $1.php [L] 
    
    다음 .php

내가이 재 작성 규칙에 도착했습니다 일치이 입니다

첫 번째 두 개는 다시 작성하지 않고 요청을 만족시킬 수 있는지 확인합니다 (이미지 및 기타 PHP 이외의 콘텐츠의 경우). 세 번째 규칙을 사용하면 .php을 추가하면 요청을 유효하게 만들지 여부를 확인하고 싶습니다 (그렇지 않은 경우 다시 작성 규칙을 작성하거나 404를 반환합니다).

RewriteCond %{REQUEST_FILENAME}.php -f 부분은 절대로 일치하지 않는 것 같습니다. 어떤 제안?

편집

이러한 항목이 포함 된 재 작성 로그 : 나는 이상한은/접촉, 그리고/var/www/mysite /가 htdocs에/접촉을 일치하려고 찾을

(4) RewriteCond: input='/contact' pattern='!-f' => matched 
(4) RewriteCond: input='/contact' pattern='!-d' => matched 
(4) RewriteCond: input='/contact.php' pattern='-f' => not-matched 

을 (적어도 그게 내가 REQUEST_FILENAME에있는 문서를 읽을 때 기대하는 것입니다.) 분명히 REQUEST_FILENAME은 실제 경기가있을 때 내가 기대하는 것입니까? 답에 대한 Thomas

EDIT2

감사합니다 : 수동 아직 발견되지 않은 PHP 파일의 전체 파일 이름을 구성하는 대신 %{DOCUMENT_ROOT}를 사용합니다.

나는 또한 '/?' 정규 표현식에서 현재 URL의 끝에// 연락/접촉의 모든 옵션을 제거/모두가 /contact.php 참조 /contact.php합니다 :

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

UPDATE에게

저주를 많이받은 후에도 RewriteRules가 < 디렉토리> 지시어 또는 .htaccess 파일에 있는지 아니면 < VirtualHost> 지시어에 있는지 또는 httpd의 본문에 있는지 여부에 달려 있다는 것을 알게되었습니다. 다른 한편으로는 conf. 내부에서 < 디렉토리>/.htaccess 인 경우 %{REQUEST_FILENAME}에는 경로가 포함되어 있으므로 초기 솔루션이 작동해야합니다. < 디렉토리> 이외에 직접 %{DOCUMENT_ROOT}을 추가해야합니다.

답변

1

REQUEST_FILENAME을 (를) 사용하는 것에 대해 확실하지 않습니다. REQUEST_FILENAME은 일치하는 파일의 전체 경로를 가리켜 야하지만 실제로 그 파일이 존재하는지 확인하고 있습니다.`REQUEST_FILENAME` 만 '전체 로컬 파일 시스템 경로'실제로 * * 존재하는 경우 문서는 약속으로 채워 가져옵니다 보인다 RewriteLog에서

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

예 :

내가 좋아하는 뭔가를 시도 할 것입니다. 당신의 솔루션은이 문제를 해결하는 것으로 보입니다. – Wim

+0

아마도 $/{DOCUMENT_ROOT}와 $ 1 사이에 ... – Tomas

+0

주석에있는 Duh 덤핑 코드가 실제로 작동하지 않습니다 ... 누구든지이 작업을 수행하는 더 좋은 방법을 알고 있습니까? – Wim

관련 문제