htaccess和查询字符串的问题

时间:2010-11-27 01:48:40

标签: .htaccess mod-rewrite query-string

我正在尝试使用mod_rewrite重写一些URL,但是我从两个类似的规则得到了不同的结果。这是我的代码:

第一条规则

RewriteEngine On  
RewriteBase /
RewriteRule ^api/(.*?)$            index.php?p=$1 [L]

输入 example.com/api/test1/test2/test3 后,我在PHP中获得以下输出:

Array ( [p] => test1/test2/test3 ) 

第二条规则:

RewriteEngine On  
RewriteBase /
RewriteRule ^/(.*?)$            index.php?p=$1 [L]

RewriteRule ^(.*?)$            index.php?p=$1 [L] #test

输入 example.com/test1/test2/test3 后,我在PHP中获得以下输出:

Array ( [p] => index.php ) 

这不是我的预期,我认为[p] => test1/test2/test3与第一条规则相似。我该怎么做才能使结果一致?

提前致谢。

1 个答案:

答案 0 :(得分:0)

你的第二条规则,

RewriteRule ^(.*?)$ index.php?p=$1 [L]

包含一个与您要重写的内容匹配的测试模式(index.php)。在 / test1 / test2 / test3 初始重写为 index.php?p = test1 / test2 / test3 之后,执行另一次转换 index.php的重写(使用 p = test1 / test2 / test3 查询字符串)到 index.php?p = index.php

您应该调整规则,以便不执行第二次重写。一种方法是查看请求的目标是否存在:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php?p=$0