为什么美元符号$在重写URL时会忽略apache httpd.conf中的查询字符串

时间:2013-08-14 07:05:49

标签: apache rewrite query-string httpd.conf

我已经安装了一个xampp来运行我的wordpress应用程序,现在我需要configura apache来重写url请求,我已经在httpd.conf中添加了一个部分配置,这里是代码:

RewriteEngine on
<VirtualHost _default_:80>
   RewriteCond %{REQUEST_URI} ^/([a-z_-]+)/$
   RewriteRule /([a-z0-9_-]+)/$ /test.php?app=$1
</VirtualHost>

当它起作用的结果如下

http://localhost/aaa/ ---> http://localhost/test.php?app=aaa , 
是的,这就是我想要的。 但是现在我发现当http:// localhost / aaa /?p = 12这样的请求时,它也被重写了

http: //localhost/aaa/?p=12 ---> http://localhost/test.php?app=aaa 

这意味着$正则表达式不起作用,我很困惑。

我想要的是"/"的请求结束时http: //localhost/xxx/将其重写为//localhost/test.php?app=xxx,但其他人则不会。{/ p>

1 个答案:

答案 0 :(得分:4)

如果您打算仅重写/aaa/并且不想重写/aaa/?p=12,即任何带有查询字符串的URI,请将此规则替换为:

RewriteCond %{QUERY_STRING} ^$
RewriteRule /([\w-]+)/?$ /test.php?app=$1 [L]
此处

RewriteCond行将确保仅在查询字符串为空时应用RewriteRule。 另外\w[A-Za-z0-9_]的简写,因此我在答案中替换了它。