Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 允许HTACCESS重写中的GET变量_Apache_.htaccess_Mod Rewrite_Rewrite - Fatal编程技术网

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_-])/$