php - 让 mod_rewrite 传递 $_GET 参数?

标签 php apache mod-rewrite get

我在这里读过关于同一主题的其他几个问题,但我的略有不同。我正在尝试做一个非常基本的 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/

相关文章:

php - AJAX 发布不工作,数据似乎没有通过

java - 生成不带 namespace 前缀的 x509 证书 android (ds :)

linux - 301重定向网址

php - 走进foreach

php - MYSQL 按日期选择和分组

php - 在 PHP 中处理文件和 utf8

java - 为什么我的 Apache Tomcat 不能执行简单的 JSP 选择数据库程序?

regex - htaccess 301 重定向 - 删除查询字符串 (QSA)

javascript - IIS URL 重写 CSS url() 值的问题

php - mod重写和查询字符串