
在我的.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
不要指向外部網址
語法是,
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。