如果引用者是外部的,则重定向所有流量
Posted
技术标签:
【中文标题】如果引用者是外部的,则重定向所有流量【英文标题】:Redirect all traffic if referrer is external 【发布时间】:2021-12-18 14:50:34 【问题描述】:我的旧网站位于 public_html。我有一个新版本的网站,我安装在 public_html/new/ 中。
我想将所有流量从 https://example.com 重定向到 https:/example.com/new,但如果用户单击我的新站点中的链接,我想允许他们浏览旧版本 (https://example.com)。
尝试使用:
RewriteCond %HTTP_REFERER !^https://example.com/.*
匹配推荐人,但它似乎不起作用。
任何帮助将不胜感激。
【问题讨论】:
您的完整规则是什么/.htaccess
文件。那个条件是可以的。您是否确认 Referer
标头正在根据请求发送? Referer 不可靠,如果新旧站点在同一个域,有更好的方法来解决这个问题。
大概你不打算在 URL 路径中保留/new
?
我想保留 /new 粒子。我很乐意采用任何可行的解决方案。
RewriteEngine On RewriteCond %HTTP_REFERER !^https://example.com/.* RewriteRule ^$ https://example.com/new/? [R=301,L]
您是否只想将旧网站的起始页重定向到新网站?或者您也想将https://example.com/i-am-an-old-page
重定向到/new/
?
【参考方案1】:
RewriteEngine On RewriteCond %HTTP_REFERER !^https://example.com/.* RewriteRule ^$ https://example.com/new/? [R=301,L]
您已将此实现为 301(永久)重定向(如果您要从旧站点迁移到新站点,则需要 SEO)。但是,301 重定向将被浏览器永久缓存。并将用户重定向回/new
(来自缓存)而不向服务器发出请求。
(这个重定向也只重定向旧主页。内页不重定向。是这个意图吗?)
这需要是 302(临时)重定向 - 以避免重定向被缓存,但这对 SEO 来说不是很好。
您可以在返回旧站点(在根目录中)的 URL 上包含 ?noredirect=1
参数 - 一个不同的 URL - 并且仅在此参数不存在时重定向。但是,您需要在从新站点导航到旧站点的所有 URL 中保留此 URL 参数。 (并且允许任何人通过简单地附加此 URL 参数来访问旧站点。)
但是,@CBroe 在 cmets 中的建议会更可取。将旧站点移动到/old
子目录,新站点将替换根中的旧站点。这对 SEO 和用户来说会更好。或者,如果Referer
不是同一个域(这将允许从新到旧的链接),您可以简单地阻止 访问/old
。并且会阻止(大多数)机器人访问/old
(尽管您仍然会实现X-Robots-Tag: noindex
HTTP 响应标头)。但请注意,Referer
不可靠,某些浏览器可能根本没有设置(用户设置)。
【讨论】:
以上是关于如果引用者是外部的,则重定向所有流量的主要内容,如果未能解决你的问题,请参考以下文章