如果引用者是外部的,则重定向所有流量

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 不可靠,某些浏览器可能根本没有设置(用户设置)。

【讨论】:

以上是关于如果引用者是外部的,则重定向所有流量的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security - 如果已经登录则重定向

Spring Security - 如果已经登录则重定向

如果用户已登录,则重定向

如果未登录,则重定向 html 页面

ASP .NET MVC:如果不满足特定条件,则重定向到视图

Django:如果 slug 错误,则重定向 url