2012-01-05 61 views
0

使用.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] 

但我用排除法部分掙扎。

回答

0

這是超級棘手的,我不會推薦這樣做,除非你必須將它餵給另一個工具(顯然你是這樣做的)。

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 
1

試試這個規則:

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