Apache-2.2

如何將整個網站重定向到單個頁面?

  • January 4, 2021

我正在關閉一個站點,並在站點的根級別用一個“無人首頁”頁面替換了舊站點。現在我需要設置一些重定向,以便對站點任何部分的任何請求,無論多麼複雜,都以根頁面結束。

我已經嘗試過(我認為)應該起作用的方法:創建一個.htaccess包含:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.example.com/ [L,R=301,NE]

但它大多失敗:請求http://www.example.com仍然通過,但https://www.example.com/doesnotexist.html拋出 404。(如果沒有重定向,這是正確的,因為該頁面在網站上不存在,但這就是重定向的重點:我希望將此請求發送到https://www.example.com。)

啊。除了我之外,這個問題的答案可能對所有人來說都是顯而易見的;任何人都可以幫忙嗎?

PS:我處於共享託管情況,所以我必須使用.htaccess文件而不是破解完整的 Apache 配置文件。

如果您正在“關閉站點”,那麼您可能不應該將舊站點頁面“重定向”到單個頁面。HTTP 重定向發送 301 響應程式碼,通知使用者和搜尋引擎頁面已移動。(儘管對單個頁面的大規模重定向很可能被 Google 視為軟 404。)

相反,您應該提供自定義的“410 Gone”響應。410 通知搜尋引擎頁面已消失且不再返回。您的“單頁”是自定義錯誤文件。

例如:

ErrorDocument 410 /single-page.html

RewriteEngine On

# Trigger a 410 Gone for all user requests
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ - [G]

檢查REDIRECT_STATUS環境變數的附加條件是確保對/single-page.html自身的直接請求也觸發 410 而不會創建重寫循環。env var在初始請求時為空,但在觸發並設置 HTTP 響應狀態REDIRECT_STATUS後設置為“410” 。RewriteRule

旁白:以這種方式使用REDIRECT_STATUS來檢測已經觸發的“錯誤狀態”的技術在 LiteSpeed 伺服器上不起作用,因為在4xx 響應的情況下,環境變數在請求期間不會更新。但是,它會為內部重寫而更新,即 200 個 OK 響應,因此它仍然是防止內部重寫循環的好解決方案。奇怪的是為什麼會有這種差異。似乎是一個錯誤。)

引用自:https://serverfault.com/questions/1035459