我有以下 .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['m'] 的值吗?
经过一番谷歌搜索后,我发现了禁用多 View 的建议。如果我添加 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']
获取“示例”部分。
关于php - mod_rewrite PHP $_GET 空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27735133/