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" 部分。
我有以下 .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" 部分。