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

如何在 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?

答案1

总结要检查是否oldsite.com仍在请求,您应该检查服务器访问日志。(维护一个单独的日志,仅用于oldsite.com。)


我如何告诉我的 .htaccess 将 http_referrer 设置为 www.oldsite.com

你不能Referer。HTTP要求标头由 User-Agent/浏览器设置。并且重定向本身不是引荐来源。

例如:

  1. 如果您oldsite.com直接在浏览器中输入(直接请求,即未Referer设置标头),然后oldsite.com发出重定向,newsite.com则原始的“无引荐来源”将被保留并且不Referer发送标头。

  2. 如果您点击来自的链接oldsite.comexample.com则浏览器会将其设置为。如果浏览器发出example.com301重定向到,则Refereroldsite.comnewsite.comexample.com仍然引荐来源,浏览器会保留此信息。发出重定向的中间网站实际上是来自目标站点。

请注意,是否Referer设置了标头(以及设置的内容)还取决于可能在原始网站上设置的任何引荐来源策略(以及用户可能拥有的任何客户端设置)。引荐来源策略还涵盖 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]

相关内容