2015-04-05 124 views
0

我有一個網站,我需要顯示自定義錯誤頁面。我之前通過編輯.htaccess文件完成了它。.htaccess文件重定向到索引頁而不是自定義404頁

這是我在我的.htaccess文件:

RewriteEngine On 
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.*$ [NC] 
RewriteRule \.(gif|jpg|jpeg)$ http://www.domain.com [L] 
RewriteCond %{HTTP_HOST} !^www\. 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
    ErrorDocument 404 /error404.php 
    ErrorDocument 403 /error404.php 
    Options -Indexes 

     RewriteCond %{THE_REQUEST} \s/+page\.php\?url=([^\s&]+) [NC] 
    RewriteRule^/%1? [R=301,L] 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule ^(.+)$ /page.php?url=$1 [L,QSA] 

頁面總是重定向到索引頁面,而不是顯示錯誤頁面。我究竟做錯了什麼?我嘗試刪除很多行,但沒有任何幫助。

+1

你最後的規則是將所有非文件非目錄轉發給'/ page.php',因此'ErrorDocument 404/error404.php'被忽略。 – anubhava 2015-04-05 05:52:14

+1

它看起來像你所有的請求路由到page.php。就Web服務器而言,每個請求都是有效的。如果你想顯示一個404頁面,你將不得不在應用程序級別執行它。 – 2015-04-05 05:52:17

+0

這是可能的,如果任何擴展名如.php或.html文件名中存在,並且它不存在,那麼只寫入404頁 – 2015-04-05 05:57:07

回答

0

您可以使用:

ErrorDocument 404 /error404.php 
ErrorDocument 403 /error404.php 
Options -Indexes 
RewriteEngine On 

RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.*$ [NC] 
RewriteRule \.(gif|jpg|jpeg)$ http://www.domain.com [L] 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{THE_REQUEST} \s/+page\.php\?url=([^\s&]+) [NC] 
RewriteRule^/%1? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^.]+)/?$ /page.php?url=$1 [L,QSA] 

如果請求的是一些擴展像.php.html這將載入您的自定義404處理器。