.htaccess确定referer是否不是当前域

时间:2012-02-14 14:14:43

标签: regex apache .htaccess mod-rewrite http-referer

我正在尝试创建一个.htaccess mod_rewrite,如果当前的referer不是我自己的域,它将表现不同。例如,假设我拥有example.com(即www.example.com,http://example.com等)。当有人访问example.com(或beta.example.com这样的子域)时,我想忽略这个.htaccess规则。所以我想正则表达式基本上只是在其中的某个地方寻找example.com并忽略它们。

但是,像otherdomain.com这样的域名(假设通过cname或A-record指向example.com)访问我的网站,我想将它们重定向到某个地方。到目前为止,我所知道的是我认为接近但不起作用。

我对这些规则的主要困惑是RewriteRule之后的部分(在这种情况下为^ $)。我在Googling中看到了一些不同的东西,我不确定这些差异。例如,我也看到了^,a(。*)$等等。

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*(example)\.com
RewriteRule ^$ redirectfile.php [L]

我也一直在搞乱

RewriteCond %{HTTP_REFERER} ^http://(.+\.)*\.com
RewriteCond %1 !^(example)\.$
RewriteRule ^$ redirectfile.php [R=302,L]

1 个答案:

答案 0 :(得分:2)

尝试

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*example\.com 
RewriteRule ^ redirectfile.php [L]

你有^$,只会与主页匹配。

我将其更改为^只会匹配每个请求,假设您要匹配每个请求。

(.*)$也会匹配每个请求,但也会捕获匹配项,以便您在目标中重复使用$ 1