mod_rewrite PHP $ _GET为空

时间:2015-01-01 22:06:46

标签: php apache .htaccess mod-rewrite

我有以下.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule api/(.*)$ api.php?m=$1 [QSA,NC,L]
</IfModule>

URL重写效果很好。我可以去http://myserver.com/api/example,它的行为就好像我去了http://myserver.com/api.php?m=example。问题是PHP $ _REQUEST和$ _GET变量是空的。难道我还不能得到$ _REQUEST [&#39; m&#39;]的价值?

经过一些谷歌搜索后,我发现了禁用MultiViews的建议。如果我添加Options -MultiViews,则会收到404错误。

我做错了什么?谢谢。

1 个答案:

答案 0 :(得分:1)

听起来你没有启用mod_rewrite。由于未启用,IfModule容器将被忽略。请参阅:How to enable mod_rewrite for Apache 2.2

必须关闭Multiviews才能使其生效,否则mod_negotiation会被激活并自动将/api/映射到/api.php,而不会给mod_rewrite一个机会做任何事。所以你需要这一行:

Options -MultiViews

如果你不能启用mod_rewrite,你可以选择改变你的api.php脚本,使其在PATH_INFO变量中查找:

$_SERVER['PATH_INFO']

获得&#34;示例&#34;一部分。