我正在尝试使用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
。
我的规则声明有问题吗?如果没有,可能导致此行为的配置是什么,以及如何覆盖它?
答案 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