【问题标题】:Rewriting URL that contains question mark重写包含问号的 URL
【发布时间】:2012-04-23 03:41:38
【问题描述】:

我遇到了有关 URL 重写的问题。我正在使用 Apache 的 mod rewrite 来重写 URL。比如我重写URL

  • www.website.com/some/path/
  • request.php?string=some/path/

然后我会显示此 URL 的特定响应。现在我的重写规则是这样的:

RewriteRule ^([a-z_/\?]+)$ request.php?string=$1

但是如果我有 URL www.website.com/some/data/?id=12&name=John 并重写它,问题就开始了,我得到这样的东西:request.php?string=some/data/?id=12&name=John。似乎在这个例子中另一个问号混淆了 PHP。如果我尝试在 request.php 中检索 $_GET['string'],我得到的只是:some/data/

为了进一步参考,Gmail 对其 URL 做了类似的事情:
https://mail.google.com/mail/?ui=1&shva=1

【问题讨论】:

  • 你试过[QSA]标志了吗?

标签: php url-rewriting get query-string


【解决方案1】:

我建议(作为马里奥)看看QSA flag (Query String Append)。此外,我会将问号从正则表达式中的字符类中取出:

RewriteRule ^([a-z_/]+)$ request.php?string=$1 [L,QSA]

【讨论】:

  • 感谢您和 mario 的出色回答。它的效果比我预期的还要好,因为我必须自己解析 get 查询。
  • @knustrle:不,你不必这样做,apache 会为你做到这一点。它也记录在重写文档中。如果要检查查询信息部分,则需要使用 RewriteCond。 RewriteRule 仅与路径有关。
猜你喜欢
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 2011-03-10
  • 2012-03-02
相关资源
最近更新 更多