mod_rewrite PHP $_GET 为空

mod_rewrite PHP $_GET empty

我有以下 .htaccess 文件:

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

URL重写效果很好。我可以去http://myserver.com/api/example and it will behave as if I went to http://myserver.com/api.php?m=example。问题是 PHP $_REQUEST 和 $_GET 变量是空的。我不应该仍然能够获得 $_REQUEST['m'] 的值吗?

谷歌搜索后,我找到了禁用 MultiViews 的建议。如果我添加 Options -MultiViews,我会收到 404 错误。

我做错了什么?谢谢。

听起来你没有启用 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']

获取 "example" 部分。