Dot-Htaccess

如何在 htaccess 重定向中設置 http_referrer?

  • April 6, 2020

我的站點有一個新域,並希望將使用者轉發到這個新站點。所以我在我的 .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

你不能。RefererHTTP請求標頭由 User-Agent/瀏覽器設置。並且重定向本身不是推薦人。

例如:

  1. 如果您oldsite.com直接在瀏覽器中鍵入(直接請求,即未Referer設置標頭),則oldsite.com發出重定向到,newsite.com然後保留原始的“無引薦來源”並且不Referer發送標頭。
  2. 如果您點擊連結,oldsite.com則將example.comexample.com設置為Referer(由瀏覽器)。如果oldsite.comthen 發出 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]

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