2011-03-02 153 views
0

我試圖做一個htaccess文件,將通過index.php重定向所有404錯誤。我希望用戶無法訪問的頁面被附加到index.php的URL,以便我可以找出哪些頁面請求失敗。Apache .htaccess 404錯誤重定向

例如,如果他們試圖訪問http://example.com/doesntexist.php,阿帕奇應重定向到http://example.com/index.php/doesntexist

這是我有:

RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php?%{QUERY_STRING} [L] 

這個工作對我的主機商之一,但是當我轉移失敗網站到另一個虛擬主機(GoDaddy)。

謝謝你們

回答

5

我現在不能測試此權利,但根據this answer,當你設置一個

ErrorDocument /404.php 

(或index.php文件,無所謂)

變量$_SERVER["REQUEST_URI"]將包含原始的失敗請求。

+0

謝謝你的回答。這個解決方案工作正常,但我可能誤解了我的問題。我不希望Apache發送404頁眉。這就是我使用重寫條件的原因。我怎樣才能使一個htaccess與「ErrorDocument /404.php」產生的效果相同,除了沒有404頭? – Nathan 2011-03-04 05:39:02

+0

@Nathan啊!嗯,這可能很難。 PHP有['header_remove()'](http://www.php.net/header_remove),但它似乎沒有刪除以前由Apache設置的標頭。你確定GoDaddy有URL重寫嗎? – 2011-03-04 08:55:04

0

直接解決方案的一個注意事項,因爲這阻止了適當的ErrorDocument重定向工作。希望這可以作爲任何碰巧遇到同樣錯誤的人的參考。

我已經創建了一個.htaccess,把

ErrorDocument 404 /Error/404.html 

但重定向從未工作,並默認頁面未找到被代替。
問題實際上在於apache2.conf(或httpd.conf)中的設置。

刪除線之下立即解決的問題

AllowOverride None 

它禁止的.htaccess從覆蓋默認設置。