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

时间:2012-01-05 17:01:04

标签: regex .htaccess mod-rewrite regex-negation 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]

但我正在与排除部分斗争。

2 个答案:

答案 0 :(得分:1)

尝试此规则:

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

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

测试数据:

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

答案 1 :(得分:0)

这是非常棘手的,我不建议这样做,除非你必须把它喂给另一个工具(显然你这样做)。

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

这说:

找到“http://”,只要没有“一个”或“两个”

找到任意数量的子域名(\ w。)+

然后找到“referenced.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