2012-02-14 66 views
2

我试图创建一个.htaccess mod_rewrite的将不同的表现,如果当前的引用者是不是我自己的域名。例如,说我自己的example.com(即www.example.com,http://example.com等)。当有人前往example.com(或beta.example.com等子域)时,我想忽略此.htaccess规则。所以我猜这个正则表达式基本上只是寻找example.com中的某个地方,而忽略它们。的.htaccess确定refferer不是当前域

然而,作为otherdomain.com这样一个域(假设通过CNAME或A记录指向example.com)访问我的网站,我想他们的地方重定向。这是我迄今为止所拥有的,我认为是接近但并不工作。

我的这些规则主要困惑是重写规则(^ $在这种情况下)后到来的部分。我在Google上看到了一些不同的东西,我不确定这些差异。举例来说,我也看到只是一个^,一个(。*)$等

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

我也一直在搞乱

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

回答

2

尝试

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

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

我改变它只是^将匹配每一个请求,假设你想每一个要求相匹配。

一个(.*)$也符合每一项要求,同时也捕捉到了比赛,让你在目标重用用$ 1

+0

感谢这些解释。但是,这些规则似乎并不奏效。无论如何,它总是重定向。我正在使用random.example.com(这个应该忽略规则)和test.local(它指向同一个服务器,但应遵循规则)进行测试。在每种情况下,我都将它重定向到转储$ _SERVER的PHP文件,并且HTTP_REFERER为空,所以我尝试使用具有正确值的HTTP_HOST。尽管如此,规则仍然没有运气。是否因为HTTP_HOST不包含像那个正则表达式那样的http? – joshholat 2012-02-14 14:47:18

+0

所以我最后的声明必须是这样。我拿出http部分并使用HTTP_HOST,现在它正在工作。使用HTTP_HOST安全吗?无论如何,它可能比HTTP_REFERER更可靠,对吗? – joshholat 2012-02-14 14:48:38

+1

@joshholat'HTTP_HOST'更可靠,但它总会给你,你的请求,而不是你来自的页面域页面的域名。如果你需要后者,那么你应该使用'HTTP_REFERER'。请注意,如果您直接在浏览器中键入URL,将HTTP_REFERER设为空白(空字符串),将其加入书签或来自安全页面。 – 2012-02-14 14:53:28