2010-03-17 60 views
3

請看看下面的.htaccess的Apache的.htaccess:ErrorDocument的和RewriteEngine敘述不一起工作

ErrorDocument 404 /404/ 

RewriteEngine On 
RewriteRule (.*) index.php [L] 

在此設置下,我使用PHP header('HTTP/1.1 404 Not Found');重定向到錯誤處理頁面,併發送相應HTTP狀態碼。正確的404狀態碼被髮送,但瀏覽器顯示一個空白頁面和訪問日誌顯示"GET /invalid-url/ HTTP/1.1" 404 -

任何人都可以告訴我如何使ErrorDocument與Apache URL重寫工作?

回答

1

我想我的問題的答案是:我不需要。 我試圖完成的是一個「404重定向」。也就是說,當請求一個無效的URL時,重定向到404文檔以及設置「Status 404 Not found」標題。 我不確定這是我想要的,因爲無效的URL應該用404狀態碼標記,而不是重定向。

0

如果您在 ErrorDocument之前定義了重寫,它應該可以工作。

+0

嗯,它沒有。我認爲Benoit是對的。只從PHP發送404頭沒有內容,不會強制Apache在我的ErrorDocument中定義的URL處提供內容。我希望這一點,但它不會發生。 – bogdanvursu

-2

試試這個

 

ErrorDocument 404 /404.html 

RewriteEngine On 
RewriteRule (.*) index.php [L] 
 
+0

不,那根本沒有幫助。另外,更改網址會在我的應用程序中破壞一些東西。 – bogdanvursu

+0

我在RewriteRule中沒有任何改變,它和你發佈的一樣。 我剛剛編輯了你的ErrorDocument行,這當然是正確的,看到這個鏈接「http://httpd.apache.org/docs/2.0/mod/core.html#errordocument」 –

+1

@Gaurav:我知道這個話題是舊的和死亡,但對於任何其他人可能正在閱讀......您使用的ErrorDocument是正確的 - **爲您的環境**。如果在bogdanvursu的環境中不存在「404.html」,您會懷疑會發生什麼?正如Benoit在上面回答的那樣,他提供了404錯誤,但沒有發生重定向,因爲RewriteRule正在重寫爲有效的url(index.php),因此ErrorDocument從未被調用過。問題是他的index.php返回了一個404頭,但沒有提供任何內容,因此用戶看不到任何內容。 –

5

是重寫規則後,宣佈404文件

這是正常的服務器不推任何404錯誤,您正在使用一個包羅萬象的正則表達式((。*))作爲唯一的重寫規則。

但是你的問題不是真正的htaccess相關。 在php中,如果您發送404頭文件,瀏覽器不會自動重定向到404頁面,但您必須自己在PHP中爲錯誤頁面內容提供服務,就像大多數帶有內部路由系統的框架一樣。

+0

Hi Benoit, 所以你只是說發送一個404頭不會強制Apache服務於ErrorDocument URL的內容。 如果我提供來自PHP的內容,設置404標題後,我確實在瀏覽器中顯示404頁面,但地址欄仍然顯示無效URL,而不是/ 404 /。 經過一番思考之後,我想這實際上並不糟糕。 – bogdanvursu

+0

嗨, 你說得對,如果瀏覽器沒有被轉發到真正的404頁面url,它似乎並不壞。使用ErrorDocument聲明Apache也不會重定向。 恕我直言,這是更好的這種方式:搜索引擎爬蟲將忘記404響應代碼的URL響應,人類將看到一個不錯的404頁面,而不是Apache的默認頁面或更糟糕的頁面上有錯誤。 – Benoit

相關問題