使用.htaccess我想重定向基于http_referer的所有子域名除了两个特定的子域名

问题描述:

使用.htaccess我很努力编写正确的正则表达式重定向基于http_referer所有子域除外两个。使用.htaccess我想重定向基于http_referer的所有子域名除了两个特定的子域名

可以说,我有

one.refered.com 
two.refered.com 

,我不想重定向,但example.refered.com[any other subdomain but one or two].refered.com

为了得到他们,我可以用

RewriteCond %{http_referer} ^http://([^.]+.)*(refered).com 
RewriteRule ^$ yoursite.html [R=302,L] 

但我用排除法部分挣扎。

这是超级棘手的,我不会推荐这样做,除非你必须将它喂给另一个工具(显然你是这样做的)。

http://(?!one|two)(\w+\.)+(?<!one|two)referred\.com 

这是说:

找到的 “http://”,只要在后面没有 “一” 或 “二”

找到任何数量的子域(\ W)。 +

然后找到“referred.com”只要它不被“一”两先”

http://one.referred.com     * no match 
http://two.referred.com     * no match 
http://blah.referred.com     * matches 
http://blah.one.blah.referred.com  * matches 
http://two.blah.referred.com    * no match 

试试这个规则:

RewriteCond %{HTTP_REFERER} ^http://(.+\.)*refered\.com 
RewriteCond %1 !^(one|two)\.$ 
RewriteRule ^$ yoursite.html [R=302,L] 
  • 在第一种情况,我们捕获的子域名
  • 在第二个条件,我们检查,如果捕获的子域名不等于one.two.

如果这两个条件满足(默认的“关系”之间的条件是逻辑),然后我们继续重写/重定向。

测试数据:

http://meow.refered.com/hello.php  = redirect 
http://one.refered.com/hello.php  = ignore 
http://one.two.refered.com/hello.php = redirect 
+0

THX LazyOne,这为我工作。 – user1132661 2012-02-02 16:54:46