我已经看到其他已回答的问题,解释了如果引荐来源与一个或多个域匹配时如何重定向用户,但无法弄清楚如何以这样的方式执行此操作,如果他们被引用,则该人将被定向到站点A.域B和站点C,如果它们是从域D引用的。所有都应该是永久重定向。
所以这是我的代码:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://domainB.com [NC]
RewriteRule ^(.*)$ https://www.websiteA.co [R=301,L]
我猜伪代码会是这样的:
RewriteEngine On
if (RewriteCond %{HTTP_REFERER} !^http://domainB.com [NC]):
RewriteRule ^(.*)$ https://www.websiteA.co [R=301,L]
else if (RewriteCond %{HTTP_REFERER} !^http://domainD.com [NC]):
RewriteRule ^(.*)$ https://www.websiteC.co [R=301,L]
我还需要确保它重定向来自该域的所有人,无论他们是来自根页还是任何其他(子)页面。
感谢您的帮助。
答案 0 :(得分:1)
由于Apache处理这些条件的方式,您不需要if else
语句来获得所需的行为。如Apache mod_rewrite文档中所述:
可以使用一个或多个RewriteCond指令来限制类型 请求将受以下RewriteRule约束。
意味着RewriteRule
仅适用于请求,如果它与之前的RewriteCond
匹配,或者如果有多个RewriteCond
,则必须将它们全部匹配。
如果指定了多个RewriteCond,则它们必须全部匹配 要应用的RewriteRule。
至于你使用L
标志:
last | L 立即停止重写过程,不要申请任何重写过程 更多规则。
这可确保您的请求不会被任何其他规则处理。您的条件是互相排斥的,因此请求无论如何都不符合这两个条件。这将允许您编写.htaccess规则,如下所示:
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://domainB\.com [NC]
RewriteRule ^(.*)$ https://www.websiteA.co$1 [R=301,L]
RewriteCond %{HTTP_REFERER} ^http://domainD\.com [NC]
RewriteRule ^(.*)$ https://www.websiteC.co$1 [R=301,L]
这会导致任何传入的请求Referer: http://domainB.com
被重定向到https://www.websiteA.co
,任何带有Referer: http://domainD.com
的传入请求都会被重定向到https://www.websiteC.co
。
这也会导致请求URI跨重定向保留。如果不需要,只需删除$1
令牌。