让mod_rewrite传递$ _GET参数?

Che*_*ryl 2 php apache mod-rewrite get

关于这个同样的话题还有其他几个问题,我已经阅读了,但我的略有不同.我正在尝试做一个非常基本的mod_rewrite:

RewriteEngine on
RewriteRule ^go/([^/\.]+)/?$ /go.php?page=$1
Run Code Online (Sandbox Code Playgroud)

go.php 看起来像这样:

<?php
ini_set('display_errors',1);
if(isset($_GET['page'])){
    echo 'page='.$_GET['page'];
}else{
    echo 'oh shnizzle!';
}
?>
Run Code Online (Sandbox Code Playgroud)

现在,当我进入/go/someword浏览器时,$_GETparam"someword"不会传递,我收到消息"哦shnizzle!" 每次.有什么可能的原因我无法$_GET通过mod_rewrite 传递任何参数?

Tim*_*one 13

你可能已经MultiViews打开了.将其添加到您的.htaccess文件顶部:

Options -MultiViews
Run Code Online (Sandbox Code Playgroud)

希望问题应该消失.

为了详细说明在这种情况下发生了什么,您的URL /go/someword指向一个不存在的资源,因此MultiViews将其转换为存在的资源/go.php.发生这种情况时,该/somewhere位将传递给PHP $_SERVER['PATH_INFO'],但go.php与您的重写规则不匹配,因此不会执行重写来编写该查询字符串.


Nic*_*ick 8

您需要在重写规则上使用QSA(查询字符串追加)标记.

RewriteEngine on
RewriteRule ^go/([^/\.]+)/?$ /go.php?page=$1 [QSA]
Run Code Online (Sandbox Code Playgroud)