我在这里读过关于同一主题的其他几个问题,但我的略有不同。我正在尝试做一个非常基本的 mod_rewrite:
RewriteEngine on
RewriteRule ^go/([^/\.]+)/?$ /go.php?page=$1
go.php
看起来像这样:
<?php
ini_set('display_errors',1);
if(isset($_GET['page'])){
echo 'page='.$_GET['page'];
}else{
echo 'oh shnizzle!';
}
?>
现在,当我在浏览器中访问 /go/someword
时,$_GET
参数“someword”未被传递,我收到消息“oh嘶嘶声!”每次。我无法通过 mod_rewrite 传递任何 $_GET
参数的可能原因是什么?
最佳答案
您可能打开了 MultiViews
。将此添加到您的 .htaccess
文件的顶部:
Options -MultiViews
问题应该会消失,希望如此。
为了详细说明在这种情况下会发生什么,您的 URL /go/someword
指向一个不存在的资源,因此 MultiViews
将其转换为/go.php
,确实存在。发生这种情况时,/somewhere
位作为 $_SERVER['PATH_INFO']
传递给 PHP,但 go.php
不匹配您的重写规则,因此不会执行重写来写入该查询字符串。
关于php - 让 mod_rewrite 传递 $_GET 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3223035/