2012-05-24 2 views
1

일부 HTTP 오류에 대해 사용자 지정 페이지를 사용하고자하므로 .htaccess 파일을 사용합니다. 동시에 URL 재 작성을 사용하고 싶지만 작동하지 않으며 이유를 모르겠습니다. 오류 문서 및 URL 다시 쓰기

내 htaccess로이다 :

#Rewrite options 
RewriteEngine On # Turn on the rewriting engine 

#Error 
RewriteRule ^error/([0-9]{3})/?$ index.php?page=error-$1 [NC,L] 

#Other options 
ErrorDocument 403 error/403 
ErrorDocument 404 error/404 

<Files .htaccess> 
order allow,deny 
deny from all 
</Files> 

IndexIgnore * 
Options All -Indexes 

답변

8

ErrorDocument 지시문의 인수는 문자열, 내부 URI 또는 ​​외부 URI 일 수 있습니다. 여기에있는 "error/404"변형은 문자열로 해석되므로 Apache는 하드 코딩 된 오류 메시지 인 것처럼 출력합니다. 이것은 우리가 지금 원하는 것이 아닙니다.

이제는 슬래시를 앞에 붙이면 "/ error/404"는 로컬 리디렉션이되지만 DocumentRoot와 관련된 로컬입니다. 따라서 .htaccess 파일이 http://example.com/testit/.htaccess에 있고 http://example.com/testit/something.txt을 요청하면 http://example.com/error/404 문서가로드됩니다. 이것을 피하려면 간단히 서브 디렉토리 (/ testit/error/404)의 경로를 추가하거나 그렇지 않으면 DocumentRoot를 사용하십시오. 그러나 이미 소프트 리디렉션을 알고 있으므로 브라우저의 주소 표시 줄에 사용자가 입력 한 URI가 표시되므로 ErrorDocument의 URI를 알기 쉽게 만들 필요가 없습니다. 그냥

ErrorDocument 404 /path-to-my-folder/index.php?page=error-404 

이 완벽하게 좋은 행동을 줄 것이다 : 우리는, 말하자면, 발견되지 example.com/something.txt를 요청할 때 동안, 주소 표시 줄은 example.com/something.txt을 계속 보여 index.php? page = error-404의 내용이 제공됩니다.

그러나 실제로 브라우저의 주소 표시 줄에/error/404를 표시하려면 ErrorDocument 404 http://my-server/my-path/error/404과 같은 ErrorDocument에 절대 URI를 지정하십시오. 그러면 브라우저가 강제로 해당 문서로 하드 리디렉션됩니다. 요청은 mod_rewrite 규칙에 의해 캡쳐되고 index.php? page = error-404의 내용이 제공되고 주소 표시 줄은/error/404가 계속 표시됩니다. 이 방법의 단점은 수동으로 404 응답 헤더를 설정해야하며 원래 요청이 무엇인지 전혀 알 수 없다는 것입니다. 로봇을 혼란스럽게 만들 수도 있고, 예상 한 행동이 아니기 때문에 방문객을 혼동시킬 수도 있습니다. 작동하지 않습니다이다

#Rewrite options 
RewriteEngine On # Turn on the rewriting engine 

#Other options 
ErrorDocument 403 /path-to-my-subfolder/index.php?page=error-403 
ErrorDocument 404 /path-to-my-subfolder/index.php?page=error-404 

IndexIgnore * 
Options All -Indexes 
0

당신이 먼저 사용자 지정 오류 페이지를 지정하고 그 (SEO 친화적 인) URL을 재 작성하는 방법에 대한

그래서
Options +FollowSymLinks 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

#Other options 
ErrorDocument 403 error/403 
ErrorDocument 404 error/404 

#Error 
RewriteRule ^error/([0-9]{3})/?$ index.php?page=error-$1 [NC,L] 

...

+1

:

내 조언은, 그냥 같은 상대 링크를 만들입니다! – Guillaume