如何在 htaccess 重定向中設置 http_referrer?
我的站點有一個新域,並希望將使用者轉發到這個新站點。所以我在我的 .htaccess 文件中設置了一個簡單的重定向,就像我的網站有一個新域並希望將使用者轉發到這個新網站。所以我在我的 .htaccess 文件中設置了一個簡單的重定向,如下所示:
RewriteCond %{REQUEST_URI} (.*) RewriteCond %{HTTP_HOST} ^www.oldsite.com$ RewriteRule ^(.*)$ https://www.newsite.com%{REQUEST_URI} [L,R=301]
到目前為止有效,但現在我需要檢查使用者是否仍在使用舊域,因此我需要檢查我的 php 應用程序中的 http_referrer。不幸的是 http_referrer 沒有設置?如果 RewriteCond 觸發,我如何告訴我的 .htaccess 將 http_referrer 設置為 www.oldsite.com?
tl;dr要檢查是否
oldsite.com
仍在請求,您應該檢查您的伺服器訪問日誌。(維護一個單獨的日誌,僅用於oldsite.com
。)如何告訴我的 .htaccess 將 http_referrer 設置為 www.oldsite.com
你不能。
Referer
HTTP請求標頭由 User-Agent/瀏覽器設置。並且重定向本身不是推薦人。例如:
- 如果您
oldsite.com
直接在瀏覽器中鍵入(直接請求,即未Referer
設置標頭),則oldsite.com
發出重定向到,newsite.com
然後保留原始的“無引薦來源”並且不Referer
發送標頭。- 如果您點擊連結,
oldsite.com
則將example.com
其example.com
設置為Referer
(由瀏覽器)。如果oldsite.com
then 發出 301 重定向,newsite.com
則 thenexample.com
仍然是引用者,並且由瀏覽器保留。發出重定向的中間站點實際上對目標站點隱藏。請注意,是否
Referer
設置了標頭(以及設置的內容)還取決於可能在原始站點上設置的任何引薦來源網址策略(以及使用者可能擁有的任何客戶端設置)。referrer-policy 還包括 HTTP 到 HTTPS 導航等(預設情況下不發送Referer
)。**更新:**我需要對它“做出反應”。例如,向使用者顯示一條消息,例如“嘿,您使用的是舊網址,請切換到新網址”。
您也許可以附加一個無害的 URL 參數作為重定向的一部分,並在接收腳本中檢查這一點。但是,這確實會公開此 URL 參數 - 您需要確保它不會被搜尋引擎等獲取,以免妨礙 SEO(即設置適當的
rel="canonical"
和/或發出輔助重定向以刪除 URL 參數- 一旦你記錄了請求)。例如:
RewriteCond %{HTTP_HOST} ^www\.oldsite\.com [NC] RewriteRule ^ https://www.newsite.com%{REQUEST_URI}?redirect=1 [QSA,R=301,L]
(檢查的第一個條件
REQUEST_URI
是什麼都不做。)
newsite.com/.htaccess
您可以執行以下操作來刪除 URL 參數(如果您沒有其他 URL 參數,這可以簡化)。但是,如果您想向使用者顯示消息,您可能不想執行此重定向(或者可能“延遲”或“設置 cookie”)。# Remove "redirect=1" URL parameter if present RewriteCond %{QUERY_STRING} ^redirect=1(?:&(.*))? RewriteRule ^ %{REQUEST_URI}?%1 [R=301,L]