重写包含问号的网址

时间:2012-04-10 20:07:31

标签: php url-rewriting get query-string

我遇到了有关网址重写的问题。我正在使用Apache的mod重写来重写URL。例如,我重写了URL

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

然后我会显示此网址的具体回复。现在我的重写规则如下所示:

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

但问题是,如果我有网址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

1 个答案:

答案 0 :(得分:5)

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

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