2011-09-07 18 views
0

.htaccess를 사용하여 PHP 확장을 제거하는 데 문제가 있습니다. sak.ps/overview.php?flag=1에 대한어떻게 mod_rewrite, htaccess에서이 문제를 해결할 수 있습니까?

www.sak.ps/overview.php에 대한 sak.ps/overview 잘 작동
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php?$2 [QSA,L] 

이 링크를하지만, sak.ps/overview/1 내부 서버 오류가 있습니다 : 여기에 규칙입니다!

두 경우 모두 URL은 URL 탭에 php 확장자로 표시됩니다.

답변

0

규칙 끝에 해당 ?$2이 필요하지 않은 경우 QSA 플래그가 바로 그 정의에 따라 자동으로 쿼리 문자열을 추가합니다.

내가 잘못 생각한 경우 규칙 정규식에 두 번째 캡처 그룹이 없기 때문에 오류가 발생합니다.

0

$2은 해당 캡처 그룹이 없으므로 항상 비어 있습니다.

2. 귀하의 규칙은 .php 확장자가 요청 된 URL 끝에 추가 된 URL에서만 작동합니다. 두 번째 URL 예제에서는 별도의 규칙이 필요합니다.

RewriteEngine on 

# 1) add .php file extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [QSA,L] 

# 2) more complex case of adding .php extension 
# will work with URLs like 
# /overview/something/here => /overview/something.php?flag=here 
# /overview/1 => /overview.php?flag=1 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+)/([^/]+)$ $1.php?flag=$2 [QSA,L] 

# 3) Another type of URL 
# will work with URLs like 
# /overview/something/here => /overview.php?flag=something/here 
# /overview/1 => /overview.php?flag=1 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^([^/]+)/(.+)$ $1.php?flag=$2 [QSA,L] 

나는이 방법에 대한 규칙을 제공 한 :

  • 규칙 # 2 처리 할 /overview/something/here =>/overview/something.php?flag=here (이전의 모든 세그먼트 파일 이름으로 처리됩니다 동안 마지막 세그먼트가 매개 변수로 취급됩니다);

  • 규칙 # 3은 /overview/something/here =>/overview.php?flag=something/here을 처리합니다 (첫 번째 세그먼트는 파일 이름으로 처리되고 다른 모든 세그먼트는 매개 변수로 처리됩니다).

/overview/1 =>/overview.php?flag=1 재기록

둘 다에 의해 처리 될 수있다 (# 2, # 3).

관련 문제