【问题标题】:Why dollar sign $ does ignore the query string in apache httpd.conf when rewrite URL [closed]为什么美元符号$在重写URL时会忽略apache httpd.conf中的查询字符串[关闭]
【发布时间】:2013-08-16 00:34:55
【问题描述】:

我已经安装了一个xampp来运行我的wordpress应用程序,现在我需要配置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,而其他的则不会。

【问题讨论】:

  • 我认为它正在工作。 %{REQUEST_URI} 不包括查询字符串(? 之后的部分) - 请参阅 here
  • 这是预期和记录的行为。该查询不是重写规则正则表达式检查的一部分,仅适用于(rewritten) request URL(/file)-path。因此,美元符号在您的示例中确实可以正常工作。您现在可能有一个不同的问题,所以请先阅读手册并尝试找到合适的词来提问。
  • 我刚刚看到了关于mod_rewrite的官方文档,现在我知道我的问题有点傻。但是感谢您的耐心回答。 @hakre

标签: apache rewrite query-string httpd.conf


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的耐心解答,这个问题是我对%{REQUEST_URI}的误解
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 2019-02-13
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2015-04-27
  • 2021-04-25
相关资源
最近更新 更多