mod_rewrite如何保存查询字符串?

时间:2013-07-02 14:57:53

标签: php apache mod-rewrite rewrite

我一直在寻找互联网,但我找不到解决方案。

我一直在尝试将查询字符串作为另一个$ _GET值传递给php。 例如,localhost/find/book会转换为index.php?url=find/book但这对我的目的来说还不够。当我尝试执行类似localhost/find/book?cols=name,library之类的操作时,我希望将其翻译为index.php?url=find/book?cols=name,library,而是转换为index.php?url=find/book,它只会省略第二个查询字符串。

我很确定我几个月前做过这件事并且有效。但现在它只是没有,我不知道为什么。

以下是我的重写规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

提前致谢。

1 个答案:

答案 0 :(得分:1)

您已经使用的QSA选项就是这样。

但是,没有第二个查询字符串,所以你的网址不会转换为:

index.php?url=find/book?cols=name,library

但改为:

index.php?url=find/book&cols=name,library
                       ^ here

请注意,您必须注意输出有效的查询字符串(例如在php中使用urlencode),否则您的应用程序可能不会按您的意图行事。例如,您的逗号应编码为%2C,但您应该让urlencode处理。