Apache 允许HTACCESS重写中的GET变量
现在我有一个重写规则,如下所示:Apache 允许HTACCESS重写中的GET变量,apache,.htaccess,mod-rewrite,rewrite,Apache,.htaccess,Mod Rewrite,Rewrite,现在我有一个重写规则,如下所示: RewriteRule ^product-([a-z^-]+).php /sample.php?m=$1 如果我尝试去“product test.php”,它工作得很好 如果我尝试去“product test.php?variable=1”,它将不起作用 如何修改重写规则以允许GET变量 注意:GET变量应该只允许字母(Aa Zz)和破折号(-)。我认为它应该是 RewriteRule ^product-([A-Za-z\-]+).php /sample.ph
RewriteRule ^product-([a-z^-]+).php /sample.php?m=$1
如果我尝试去“product test.php”,它工作得很好
如果我尝试去“product test.php?variable=1”,它将不起作用
如何修改重写规则以允许GET变量
注意:GET变量应该只允许字母(Aa Zz)和破折号(-)。我认为它应该是
RewriteRule ^product-([A-Za-z\-]+).php /sample.php?m=$1&%{QUERY_STRING}
请注意,反斜杠脱离了破折号。破折号是匹配部分中的运算符,因此必须对其进行转义
此外,要包含带有重写url的GET变量而不重写它们,请在末尾附加查询字符串标识符
这将重写:
www.example.com/product widget.php?变量=12
到
www.example.com/sample.php?m=widget&variable=12
这就是我相信你想要的
话虽如此,我不确定逃离破折号是否真的有效,因为我刚刚发现在我重写的URL中使用破折号有一个我似乎无法解决的问题。就像Apache1.3.33重写模块不喜欢重写字符串中的破折号一样。无论如何,这就是它应该如何工作的,它在我的服务器上工作。进一步探索后,我发现在我的情况下,逃离破折号是不起作用的。我最后要做的就是将破折号作为正则表达式查询中的最后一个字符。ie:^([A-Za-z0-9_-])/$