2011-04-11 31 views
0

我想使用htaccess/mod_rewrite根據兩個cookie的值進行內部重定向。我不知道如何使用反向引用來引用測試cookie的兩個值。這是我想要做的:如何使用mod_rewrite在.htaccess中測試許多cookie?

foo = value_of_cookie_foo 
bar = value_of_cookie_bar 
if (foo AND bar) { 
    RewriteRule ^(.*)$ mysite/foo/bar [R,L] 
} 

不幸的是,下面的代碼不起作用。這是因爲(根據Apache文檔)反向引用僅適用於最後的RewriteCond。第一個沒有考慮到。

RewriteCond %{REQUEST_URI} ^/whatever$ 
RewriteCond %{HTTP_COOKIE} cookie_foo=([^;]+) [NC] 
RewriteCond %{HTTP_COOKIE} cookie_bar=([^;]+) [NC] 
RewriteRule ^(.*)$ mysite/%1/%2 [R,L] 

對於餅乾cookie_foo=foo; cookie_bar=bar;上述代碼重定向到http://mydomain.com/mysite/bar代替http://mydomain.com/mysite/foo/bar

我是否應該將兩個cookie的測試放在一個RewriteCond?怎麼樣?

回答

0

你應該重新排序Cookie值立刻讓他們兩個:

RewriteCond %{REQUEST_URI} ^/whatever$ 
RewriteCond %{HTTP_COOKIE} (^|;\s*)cookie_foo=([^;]+) 
RewriteCond %2;%{HTTP_COOKIE} ^([^;]+)(;\s*|[^;])+cookie_bar=([^;]+) [NC] 
RewriteRule ^(.*)$ mysite/%1/%3 [R,L] 

這將使cookie_foo值在開始的時候再獲取cookie_bar的值。

+0

這一個伎倆!此外,Cookie的順序並不重要。謝謝! – pete 2011-04-11 23:23:36

+0

我該如何爲4個餅乾做這項工作? – Stefan 2013-08-09 17:28:43

0

你能貝利像這樣的cookie檢查:

RewriteCond %{HTTP_COOKIE} cookie_foo=([^;]+);\scookie_bar=([^;]+);? [NC] 
+0

謝謝!看起來它應該工作。不過,我更喜歡下面的解決方案,看看我的評論。乾杯! – pete 2011-04-11 23:25:21

+0

@pete:同意Gumbo的解決方案比這個更好,因爲它是不可知的cookie命令。 – anubhava 2011-04-12 03:15:57

相關問題