2012-10-02 21 views
1

我想基於cookie值和查詢字符串值重定向,但似乎無法使兩個值都正確返回。我正在使用:如何獲得兩個變量用於.htaccess重定向?

RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_COOKIE} secret=([^;]+) [AND] 
RewriteCond %{QUERY_STRING} ^file=(\w+)$ 
RewriteRule ^downloads/(.*)/$ /downloads/%1/%2 

並使用URL「/downloads/?file=protected/doc.pdf」。我想重定向到「/ downloads/[secret cookie_val] /protected/doc.pdf」

謝謝!

回答

1

沒有[AND]標誌。條件默認爲「結合」在一起。

RewriteEngine on 
RewriteBase/
RewriteCond %{ENV:REDIRECT_STATUS} !200 
RewriteCond %{QUERY_STRING}:::%{HTTP_COOKIE} ^file=(\w+):::secret=([^;]+) 
RewriteRule ^downloads/(.*)/?$ /downloads/%2/%1 

編輯:

此外,如果要求/downloads/?file=protected/doc.pdf,你已經在你的正則表達式有一個太多/的只是意識到你正在試圖訪問一個以前RewriteCond回參考使用%2 ,因爲您已經使用%{QUERY_STRING}創建了另一個分組,所以這將會變爲空白。因此,您需要將2個變量組合成一個RewriteCond,並匹配:`%{QUERY_STRING} :::%{HTTP_COOKIE}。然後你就可以反向引用查詢字符串和cookie。

RewriteCond %{ENV:REDIRECT_STATUS} !200是爲了防止重寫引擎循環。

+0

謝謝,但我仍然有困難。如果/ downloads /是一個虛擬根(這就是.htaccess所在的地方),它會有所作爲嗎? – DeweyOx

+0

@DeweyOx如果你把這些規則放在'downloads'目錄下,把'RewriteBase /'改成'RewriteBase/downloads /'並將正則表達式從'^ downloads /(.*)/?$'改爲'( 。*)/?$' –

+0

仍似乎無法得到它的工作。這就是我所擁有的:'RewriteEngine on RewriteBase/downloads/ RewriteCond%{ENV:REDIRECT_STATUS}!200 RewriteCond%{QUERY_STRING} :::%{HTTP_COOKIE}^file =(\ w +)::: secret =( [^;] +) RewriteRule(。*)/?$/downloads /%2 /%1' – DeweyOx