任何字符匹配都无法在Apache mod_rewrite RewriteRule中使用

时间:2016-10-19 12:12:40

标签: regex apache .htaccess mod-rewrite

我正在尝试使用Apache的mod_rewrite重写网站上的网址。

我在.htaccess文件中有以下行,该文件位于服务器根目录的foo文件夹中:

RewriteEngine On
RewriteBase /foo/

RewriteRule ^(.+)$ index.php?id=$1 [NC,L]

我们的想法是提取网址foo/http://abc.example.com/foo/bar之后的所有内容并将其重写为http://abc.example.com/foo/index.php?id=bar,我认为这应该非常简单 - 这不是我第一次使用{ {1}}。

我已经在http://htaccess.madewithlove.be上成功测试了这一点,但是,我发现在我的服务器上它只有在规则中使用mod_rewrite而不是通配符[a-z]+时才有效。否则,.+参数将返回id

我的规则声明有问题吗?如果没有,可能导致此行为的配置是什么,以及如何覆盖它?

2 个答案:

答案 0 :(得分:1)

值得一试以防其他重写是干扰,或者你偶然重写为index.php:

RewriteRule ^(?!index.php)(.*) index.php?id=$1 [NC,L]

答案 1 :(得分:0)

试试这个,

RewriteEngine On
RewriteBase /foo/
RewriteRule ^(.+)$ index.php?id=$1 [QSA,NC,L]

问题可能与查询字符串有关。

https://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa