Php 让mod_rewrite传递$_getparams?

Php 让mod_rewrite传递$_getparams?,php,apache,mod-rewrite,get,Php,Apache,Mod Rewrite,Get,关于这个话题,我读到了另外几个问题,但我的问题略有不同。我正在尝试做一个非常基本的mod_重写: 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!'

关于这个话题,我读到了另外几个问题,但我的问题略有不同。我正在尝试做一个非常基本的mod_重写:

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
时,不会传递
$\u GET
参数“someword”,每次我都会收到消息“oh shnizzle!”。我无法通过mod_rewrite传递任何
$\u GET
参数的可能原因是什么?

您的重写规则上需要QSA(查询字符串附加)标志

RewriteEngine on
RewriteRule ^go/([^/\.]+)/?$ /go.php?page=$1 [QSA]
重写规则上需要QSA(查询字符串附加)标志

RewriteEngine on
RewriteRule ^go/([^/\.]+)/?$ /go.php?page=$1 [QSA]
一些想法

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^/go/([^/\.]+)/?$ /go.php?page=$1 [QSA]
如果请求有效的页面、脚本或目录,则应停止触发mod_重写规则。它还将附加任何现有的查询字符串

go.php文件中,我将有以下内容:

<?php
ini_set('display_errors',1);
echo '<b>$_GET Variables</b><pre>';
var_dump( $_GET );
echo '</pre>';
?>

这样,您就可以准确地看到GET变量传递给脚本的内容,而不必寻找特定的变量(至少在它自身运行之前是这样)

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^/go/([^/\.]+)/?$ /go.php?page=$1 [QSA]
如果请求有效的页面、脚本或目录,则应停止触发mod_重写规则。它还将附加任何现有的查询字符串

go.php文件中,我将有以下内容:

<?php
ini_set('display_errors',1);
echo '<b>$_GET Variables</b><pre>';
var_dump( $_GET );
echo '</pre>';
?>


这样,您就可以准确地看到传递给脚本的GET变量,而不是寻找特定的变量(至少在它自己表现出来之前)。您可能已经启用了“多视图”。将其添加到
.htaccess
文件的顶部:

希望这个问题能够解决


为了详细说明在这种情况下会发生什么,您的URL
/go/someword
指向一个不存在的资源,因此
多视图
将其转换为确实存在的
/go.php
。发生这种情况时,
/where
位作为
$\u服务器['PATH\u INFO']
传递给PHP,但是
go.PHP
与您的重写规则不匹配,因此不会执行重写来编写该查询字符串。

您可能已经打开了
多视图。将其添加到
.htaccess
文件的顶部:

希望这个问题能够解决


为了详细说明在这种情况下会发生什么,您的URL
/go/someword
指向一个不存在的资源,因此
多视图
将其转换为确实存在的
/go.php
。发生这种情况时,
/where
位作为
$\u服务器['PATH\u INFO']
传递给PHP,但是
go.PHP
与您的重写规则不匹配,因此不会执行重写来编写查询字符串。

我似乎对代码没有问题。。。我唯一要做的就是将
/go.php?page=$1
更改为相对地址
go.php?page=$1
.hmm。我只是把我的地址改成了相对地址,但还是不起作用。。。得到了我通常的结果:“在shnizzle上!”有人知道我不知道mod_rewrite是否有一个全局配置选项吗?(可能我的服务器上有什么东西被关闭了?)我的代码似乎没有问题。。。我唯一要做的就是将
/go.php?page=$1
更改为相对地址
go.php?page=$1
.hmm。我只是把我的地址改成了相对地址,但还是不起作用。。。得到了我通常的结果:“在shnizzle上!”有人知道我不知道mod_rewrite是否有一个全局配置选项吗?(也许我的服务器上有什么东西被关闭了?)我还应该提到,当我使用[QSA]时,普通的查询字符串也不会被传递。你知道是否有特定的mod_rewrite config设置可以完全关闭GET all together吗?这不是QSA修复的-它只允许原始url上的任何查询字符串放入重写的url Paul,你是对的-抱歉,没有正确阅读问题。我还应该提到,当我使用[QSA]时,普通的查询字符串也不会被传递。你知道有没有特定的mod_rewrite config设置可以完全关闭GET all together?这不是QSA所修复的-它只允许原始url上的任何查询字符串被放入重写的url中Paul,你是对的-抱歉,没有正确阅读问题。太好了!是的,就是这个。重写现在工作得非常好,$\u GET参数正在通过。非常感谢。杰出的是的,就是这个。重写现在工作得非常好,$\u GET参数正在通过。非常感谢。