使用.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
THX LazyOne,这为我工作。 – user1132661 2012-02-02 16:54:46