2017-05-04 2 views
1

나는 모든 "404"오류를 PHP 파일로 리디렉션하고 싶습니다. Wordpress의 .htaccess를 초기 단계로 사용했습니다. 작동하지만 경로가 폴더 인 경우에는 끝에 "/"표시가있어서 금지 된 오류가 발생합니다.아파치 htaccess 모든 404 (파일 및 폴더) 리디렉션

RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /includes/redir.php [L] 

내가하려고하면 : 예상

http://example.com/anything 

작품으로, 내 redir.php로 리디렉션. 하지만 시도해 보면 :

http://example.com/anything/ 

은 금지 된 오류를 반환합니다.

redir.php에 존재하지 않는 모든 것을 리디렉션하려면 어떻게해야합니까? httpd.conf를 변경해야합니까? "ErrorDocument 404 /includes/redir.php"줄이 필요합니까?

+2

명확히하기 위해 실제로 WordPress 사이트가 아니십니까? – MrWhite

+1

아니요, PHP 사이트입니다. 저는 Wordpress 사이트의 .htaccess를 시작점으로 사용했습니다. – Arvy

+1

위 예제에서'/ anything'은 실제 디렉토리입니까? 그렇지 않으면 403 Forbidden 오류가 발생하지 않아야합니다. – MrWhite

답변

1

"ErrorDocument 404 /includes/redir.php"줄이 필요합니까?

네, 훨씬 더 바람직 리디렉션/오류 문서를 수동으로 다시 작성하는 것보다이 같은 ErrorDocument 지시어를 사용하는 것입니다.

정의 된 ErrorDocument은 올바른 HTTP 상태 코드를 반환합니다 (수동으로하지 않아도 됨). 그리고 PHP는이 오류와 관련하여 수퍼 글로벌의 $_SERVER에 추가 변수를 설정합니다.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^/includes/redir.php [L] 

하지만 경로가 폴더 인 경우, 의미했던 "/ : 특별히 대신 다음과 같은 일을 할 수있다 (404)에 파일을 다시하고 싶었


"결국, 나는 금지 된 오류를 얻는다.

URL이 디스크의 실제 폴더에 매핑되지 않는 한 URL이 폴더처럼 보이는지는 중요하지 않습니다. 디렉토리 색인 문서가없는 경우에만 403 Forbidden을 얻을 수 있습니다.

+1

그게 다야! ErrorDocument가 필요하고 RewriteBase를 제거하십시오. 감사! – Arvy

+1

'RewriteBase' 지시자는이 문맥에서 실제로 아무것도하지 않았습니다. 'RewriteBase' 지시어는 상대 경로 (슬래시 나 스키마로 시작하지 않음)에 사용되는 경로를 단지 _substitutions_으로 설정합니다. 예 :'RewriteRule^redir.php' ('redir.php'는 _relative_,'/ redir.php'는 그렇지 않습니다). 상대 경로가 없다면 불필요합니다. (당신은'RewriteBase' 지시자에 대해 많은 혼란을 겪습니다,하지만 그게 전부입니다.) – MrWhite

+1

감사합니다. 어쨌든 귀하의 지시어를 사용하여 이제 작동 중입니다. 나는 다른 것들도 시도해 보았습니다. 그리고 지금 나는 문제를 해결 한 또 다른 것이 있는지 절대 확신하지 못합니다. 그러나 귀하의 도움과 정보는 정말로 감사하게 생각합니다. – Arvy