我有以下.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错误。
我做错了什么?谢谢。
答案 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;一部分。