首页 > 解决方案 > 如果引用者是外部的,则重定向所有流量

问题描述

我的旧网站位于 public_html。我有一个新版本的网站,我安装在 public_html/new/ 中。

我想将所有流量从https://example.com重定向到 https:/example.com/new 但我想允许用户在单击我的链接时浏览旧版本( https://example.com )新网站。

尝试使用:

RewriteCond %{HTTP_REFERER} !^https://example.com/.* 

匹配推荐人,但它似乎不起作用。

任何帮助将非常感激。

标签: .htaccessredirectmod-rewritehttp-redirectreferrer

解决方案


RewriteEngine On RewriteCond %{HTTP_REFERER} !^https://example.com/.*
​RewriteRule ^$ https://example.com/new/? [R=301,L]

您已将此实现为 301(永久)重定向(如果您从旧站点迁移到新站点,则需要 SEO)。但是,301 重定向将被浏览器永久缓存。并将用户重定向回/new(从缓存)而不向服务器发出请求。

(此重定向也只重定向旧主页。内页不重定向。这是故意的吗?)

这需要是一个 302(临时)重定向 - 以避免重定向被缓存,但这对 SEO 来说不是那么好。

您可以?noredirect=1在返回旧站点(在根中)的 URL 上包含一个参数 - 一个不同的 URL - 并且仅在此参数不存在时才重定向。但是,您需要在从新站点导航到旧站点的所有 URL 中保留此 URL 参数。(并且允许任何人通过简单地附加此 URL 参数来访问旧站点。)

但是,@CBroe 在评论中的建议会更好。将旧站点移动到/old子目录,新站点将替换根中的旧站点。这对 SEO 和用户来说会更好。或者,如果不是同一个域,您可以简单地阻止访问(这将允许从新到旧的链接)。并且会阻止(大多数)机器人访问(尽管您仍然会实现HTTP 响应标头)。但是请注意,这是不可靠的,某些浏览器可能根本没有设置(用户设置)。/oldReferer/oldX-Robots-Tag: noindexReferer


推荐阅读