我有一個自定義的404錯誤頁面和一個mod_rewrite規則。如果我訪問一個不存在的頁面,我會看到我的404錯誤頁面。我的問題是,如果我發出了從我的PHP頁面404頭,開不開我的404頁,相反,我得到這個:apache mod_rewrite和404頁的問題
Not Found
The requested URL /index.php was not found on this server.
Additionally, a 404 Not Found error was encountered while trying
to use an ErrorDocument to handle the request.
這是我的.htaccess:
RewriteEngine on
ErrorDocument 404 /errors/404.php
RewriteRule ^[A-Za-z0-9]{8}/$ /index.php
這是我從/index.php重定向,只有在密鑰不存在時纔會404。 $ key則是從解析URL(例如http://localhost/aKeYCoDE/)獲得:
<?php
if (!key_exists($key)){
header('HTTP/1.0 404 Not Found');
exit;
}
?>
我希望它重定向到我的404頁。
UPDATE:
這是肯定一些有關的事實,我從被改寫網頁(的index.php)呼叫404。如果我創建一個虛擬頁面:/redirect.php,然後什麼也不做,但從那裏發出404,我得到我的自定義404頁面。但是,如果我爲它編寫mod_rewrite規則,並嘗試以這種方式訪問它,我會得到默認的404錯誤頁面。
聽起來好像找不到你的404.php。你確定它存在嗎?您也可以嘗試文件的完整URL路徑。 –
/errors/404.php肯定存在。我可以直接訪問它,如果我訪問一個不存在的文件,我會得到它。我不明白的是,如果我從我的PHP頁面(重寫的/index.php)執行404重定向,我會得到默認的錯誤頁面,而不是我自己的。 – Blazes
我同意你的回答,下面給出的答案(來自PHP的404狀態響應不會觸發你的Apache ErrorDocument)。但是,對您的問題的更新似乎與此相矛盾......「如果我創建了一個虛擬頁面:/redirect.php,然後什麼都不做,只能從那裏發出404,我得到了我的自定義404頁面。」 ? – MrWhite