2012-12-02 5 views
0

나쁜 제목을 위해 죄송합니다. 지금.htaccess를 사용하여 URL 재 작성. 수행 할 작업은 무엇입니까?

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

그것을 사용하고하는 것은 localhost/home 를 사용할 때 잘 작동하지만 localhost/home.php를 입력 그것은 또한 요구 된 페이지가 존재하지 않는 것을 오류 페이지로 localhost/home.php를 입력 할 때 리디렉션 할을 남기고 때 내 문제입니다.

어떻게해야합니까 .htaccess로하거나 내가 리디렉션하는 PHP를 사용해야합니까?

답변

1

확장명이 '.php'인 URL을 요청하면 .htaccess 조건이 충족되지 않으므로 서버 (Apache)가 요청을 정상적으로 처리합니다. 그것이 작동하는 이유입니다.

제 생각에 가장 쉬운 전에 다른 규칙 을 추가 이전입니다 : 브라우저 리디렉션 할 경우

RewriteCond %{REQUEST_URI} \.php$ # if it ends in .php 
# note we're using REQUEST_URI above to only match when 
# the URI ends in .php, not the requested file, 
# otherwise we would have a endless loop! 
RewriteRule ^(.*)$ /error_page.php # note the leading slash 

RedirectRule[R] 옵션을 추가 (그리고 난 당신이 추가 할 필요가 있다고 생각 전체 경로), 예 :

RewriteRule ^(.*)$ /path/error_page.php [R] 
+0

내가 리디렉션 루프를했다 \ .PHP $ 한다 RewriteRule은^(. *) $ HTTP :! // localhost를/오류 [R]를 한다 RewriteCond % {REQUEST_FILENAME}는 을 -d RewriteCond % {REQUEST_FILENAME} \. php -f RewriteRule^(. *) $ $ 1.php –

+0

'localhost' (호스트 이름)를 다시 쓰지 않고'/'로 시작하면됩니다. – jmlnik

+0

그래도 작동하지 않는다면'L' 옵션을 추가해보십시오. (예 :'[R, L]')하지만 그럴 필요는 없습니다. – jmlnik

1

당신이이 디렉토리가 아닌 경우 REQUEST_FILENAME에 ".PHP"를 추가되어 일을하고있는 경우는 기존 페이지에 결과를 ".PHP"을 추가. localhost/home.php을 입력하면 localhost/home.php.php을 찾을 수 없으므로 다시 쓰기가 실행되지 않습니다. 따라서이 두 번째 시나리오에서는 재 작성이 완전히 부적합합니다. 404 상황이 정상적으로 처리되었는지 여부를 제대로 확인해야합니다. 예를 들어, ErrorDocument 지시문을 구성 했습니까? 그런 다음 -f 조건을 제거하고 home.php.php으로 리디렉션하는 것을 고려해 볼 수 있습니다. 물론 이는 실패합니다. 한다 RewriteCond % {REQUEST_FILENAME}에한다 RewriteEngine를 사용하는 경우