我需要做的是将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]
答案 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。