我的网站有了一个新域名,我想将用户转发到这个新网站。因此,我在 .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/浏览器设置。并且重定向本身不是引荐来源。
例如:
如果您
oldsite.com
直接在浏览器中输入(直接请求,即未Referer
设置标头),然后oldsite.com
发出重定向,newsite.com
则原始的“无引荐来源”将被保留并且不Referer
发送标头。如果您点击来自的链接
oldsite.com
,example.com
则浏览器会将其设置为。如果浏览器发出example.com
301重定向到,则Referer
oldsite.com
newsite.com
example.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]