php - mod_rewrite PHP $_GET 空

标签 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['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/

相关文章:

php - Facebook SDK - 用户登录时获取访问 token

php - json_encode 不使用 html 字符串作为值

php - 我应该在 PDO 对象中返回什么来生成可靠的代码?

java - 在 Apache JsonToStringStyle 中格式化日期

php - SE 抓取 booth 目录和/index.php 文件 - 我怎样才能防止这种情况发生?

php - 禁止客户在 WooCommerce 结账时更改国家/地区

apache - 无法使用 Chrome 访问网络

PHP SOAP 和命名空间。 PHP fatal error : Class 'Jira\SoapClient' not found

node.js - socket.io 忽略 url 路径似乎会导致轮询 GET 404 错误

.htaccess - 如何在.htaccess上下文中阻止多次mod_rewrite传递(或无限循环)