如何在.htaccess重定向中使用两个变量?

时间:2012-10-02 21:59:05

标签: regex apache .htaccess

我正在尝试根据Cookie值和查询字符串值重定向,但似乎无法让两个值都正确返回。我正在使用:

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 个答案:

答案 0 :(得分:1)

没有[AND]标志。条件默认为“anded”在一起。

此外,如果您要求/downloads/?file=protected/doc.pdf,那么您的正则表达式中有/RewriteEngine on RewriteBase / RewriteCond %{ENV:REDIRECT_STATUS} !200 RewriteCond %{QUERY_STRING}:::%{HTTP_COOKIE} ^file=(\w+):::secret=([^;]+) RewriteRule ^downloads/(.*)/?$ /downloads/%2/%1

RewriteCond

编辑:刚刚意识到您尝试使用%2访问之前的%{QUERY_STRING}后退引用,这将是空白的,因为您已使用RewriteCond创建了另一个分组。因此,您需要将2个变量合并为一个RewriteCond %{ENV:REDIRECT_STATUS} !200并匹配:`%{QUERY_STRING} :::%{HTTP_COOKIE}。然后,您将能够反向引用查询字符串和cookie。

{{1}}是为了防止重写引擎循环。