mod_rewrite传递变量和

时间:2016-10-09 18:52:06

标签: .htaccess mod-rewrite

我需要做的是将1个变量作为变量传递,其余的作为URL的其余部分保持不变,所以我可以在以后通过$ _GET获取它们。以下不起作用:

RewriteRule     ^store/([a-zA-Z0-9\_\-]+).html?(.*)/?$  store.php?var1=$1&$2 [L]

可能的链接可能是:

store/products.html
store/products.html?sort=asc&price=down
store/products.html?price=down&here_we_can_have_a_lot_of_different_params_in_whatever_order

基本上,只需要这个$ var1,其余的转发到URL?我怎么能这样做?

P.S。我想我找到了一个解决方案:

RewriteRule ^store/([a-zA-Z0-9\_\-]+).html?(.*)/?$  store.php?var1=$1&%{QUERY_STRING} [L]

1 个答案:

答案 0 :(得分:0)

问题是关于RewriteRule如何运作的前提。仅RewriteRule 匹配URI路径(在Apache语言中与Request URI匹配),而不是与查询字符串匹配。这意味着正则表达式结尾处的(.*)/?$只能起作用,因为它可以简化为只有' $' (或字符串的结尾)和?之前的.htm只意味着正则表达式将匹配.html以及RewriteRule ^store/([a-zA-Z0-9\_\-]+).html store.php?var1=$1 [L,QSA]

规则的更简单版本如下:

Query String Append

QSA代表{{1}},它只是将任何现有的查询字符串添加回重写的URL。