我可以讓 Apache ErrorDocument 返回 404 而不是 301 嗎?

我可以讓 Apache ErrorDocument 返回 404 而不是 301 嗎?

在我的.htaccess我有

ErrorDocument 404 http://foo.com/404.html

它可以工作,從某種意義上說,我可以從任何檔案未找到錯誤中恢復並顯示 404 頁面,但它的工作方式是使用 301 將錯誤的 URI 重定向到我的404.html頁面。

這很糟糕,因為搜尋引擎和爬蟲最終不會看到 404 個代碼,而是 301 代碼,並且不會從索引中清除已刪除的頁面。

我可以讓 Apache 在出現文件未找到錯誤時提供此 404 頁面的內容,但仍返回 404 代碼而不是 301 嗎?

答案1

您應該嘗試使用絕對或相對路徑而不是 URL

我的 apache2.conf :

ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html

答案2

不要指向外部網址

Apache 的文檔說

語法是,

ErrorDocument <3-digit-code> <action>

行動可以在哪裡,

  • 要顯示的文字。用引號 (") 將文字括起來。
  • 要重新導向到的外部 URL。
  • 要重定向到的本機 URL。

指向外部 url 將導致實際重定向,而使用本地 url 則是內部重定向。

因此,要呈現文件的內容,只需指向它即可,例如:

ErrorDocument 404 /404.html

使用適合作業的正確狀態代碼

這很糟糕,因為搜尋引擎和爬蟲最終不會看到 404 代碼,而是 301 代碼,不會從索引中清除已刪除的頁面

如果頁面用過的曾經存在但現在不存在,正確的回應代碼是410 走了。 410 是表示「嘿,那不存在」的程式碼,而 404 僅表示在重複嘗試存取現在不存在的頁面後。

答案3

對 Maxence 和 AD7six 的答案進行評論(我在 serverfaul 上沒有足夠的聲譽,並且堆疊交換聲譽顯然不算在內):

我剛剛通過這種方式解決了問題,但是由於 URL 仍然是用戶嘗試調用的 URL,因此包含的圖片和样式丟失了。

解決方案是在 404 文件的頭部添加一個基本標籤,例如

ErrorDocument 404

或使用有或沒有協定/網域的絕對 URL。

相關內容