.htaccess Codeigniter$config['uri_协议']问题

.htaccess Codeigniter$config['uri_协议']问题,.htaccess,codeigniter,.htaccess,Codeigniter,我需要将$config['uri_protocol']从AUTO更改为PATH_INFO以允许url参数 我的问题是:当我设置$config['uri\u protocol']=PATH\u INFO;常规URL停止运行,无论单击哪个站点页面URL,我都会看到主页 print\u r$\u服务器显示我添加的url参数仅出现在请求URI中,而不出现在任何其他$\u服务器部分中 我的访问权限是 到 重写规则^.*$index.php?/$1[QSA,L]以允许url参数传递。现在url参数也出现在

我需要将$config['uri_protocol']从AUTO更改为PATH_INFO以允许url参数

我的问题是:当我设置$config['uri\u protocol']=PATH\u INFO;常规URL停止运行,无论单击哪个站点页面URL,我都会看到主页

print\u r$\u服务器显示我添加的url参数仅出现在请求URI中,而不出现在任何其他$\u服务器部分中

我的访问权限是

到 重写规则^.*$index.php?/$1[QSA,L]以允许url参数传递。现在url参数也出现在

 $_SERVER

 REDIRECT_QUERY_STRING, QUERY_STRING AND REQUEST_URI

问题是:我尝试了$config['uri_protocol']和上面的所有选项,但每当我添加URL参数时,CI仍然会给出错误404


注意:我在2台服务器上尝试了上述方法。其中一个是centos5/Apache2/Plesk VPS,另一个在xampp/Vista上

您可能应该在mod_rewrite的上一条规则中使用[QSA]选项。。。 这会将我所指的“?”后面的查询字符串参数附加到最终URL

您的规则的结尾如下:

RewriteRule ^(.*)$ index.php?baseurl=$1 [QSA,L]
如果您的请求是:

http://yourhost.com/module/action?param1=value1&param2=value2
最后,你会得到:

http://yourhost.com/index.php?baseurl=/module/action&param1=value1&param2=value2

我还没有测试过。这是您真正想要的吗?

您可能应该在mod_rewrite的上一条规则中使用[QSA]选项。。。 这会将我所指的“?”后面的查询字符串参数附加到最终URL

您的规则的结尾如下:

RewriteRule ^(.*)$ index.php?baseurl=$1 [QSA,L]
如果您的请求是:

http://yourhost.com/module/action?param1=value1&param2=value2
最后,你会得到:

http://yourhost.com/index.php?baseurl=/module/action&param1=value1&param2=value2

我还没有测试过。这是您真正想要的吗?

在这种情况下,您不想将$config['uri\u protocol']设置为PATH\u INFO。var_dump$_SERVER在某个地方,找到包含路径的变量,如果AUTO不起作用,则将其设置为该变量。

在这种情况下,您不希望将$config['uri_protocol']设置为路径信息。var_dump$\u服务器的某个位置,并找到包含路径的变量,如果AUTO不起作用,则将其设置为该变量。

我也遇到了同样的问题,当我将uri_协议设置为path_信息时,我的站点的所有链接都会转到默认控制器和操作。然后我发现我的服务器不支持PATH_INO变量,所以我在config.php中执行了两个步骤来解决这个问题:

第一:

$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
然后:


以上两行解决了我的问题

我也遇到了同样的问题,当我将uri_协议设置为PATH_INFO时,我站点的所有链接都会转到默认控制器&action。然后我发现我的服务器不支持PATH_INO变量,所以我在config.php中执行了两个步骤来解决这个问题:

第一:

$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
然后:


以上两行解决了我的问题

最好的方法是检查从服务器获取的参数

如果您获得$\u SERVER['PATH\u INFO'],请使用以下命令

$config['uri_protocol'] = 'PATH_INFO';
否则,如果您获得的是$\u SERVER['ORIG\u PATH\u INFO',请使用以下命令:

$config['uri_protocol'] = 'ORIG_PATH_INFO';

在配置文件中进行这些更改。

最好的方法是检查从服务器获取的参数

如果您获得$\u SERVER['PATH\u INFO'],请使用以下命令

$config['uri_protocol'] = 'PATH_INFO';
否则,如果您获得的是$\u SERVER['ORIG\u PATH\u INFO',请使用以下命令:

$config['uri_protocol'] = 'ORIG_PATH_INFO';
在配置文件中进行这些更改

我的问题是:当我设置$config['uri\u protocol']=PATH\u INFO;常规URL停止运行,无论单击哪个站点页面URL,我都会看到主页

这可能是因为您实际上没有在RewriteRule指令中将URL路径作为path_INFO传递:

在这里,URL路径作为查询字符串传递,路径信息为空,这可以解释为什么所有请求都会出现在您的主页上。在这种情况下,您需要额外的QSA标志,以便按照问题中的说明从请求中附加任何额外的查询字符串

要将URL路径作为路径信息(即其他路径名信息)传递,您需要删除?从重写规则替换。这样就不需要QSA标志,因为请求中的查询字符串将自动传递给替换

例如,要使用PATH_INFO,请按如下方式构造RewriteRule指令:

RewriteRule (.*) index.php/$1 [L]
regex.*与^.*$相同,因为默认情况下regex是贪婪的

请注意,您的服务器还必须配置为接受路径信息,否则它将触发自动404。默认情况下,这取决于关联的文件处理程序。默认情况下,与.php文件关联的处理程序将接受路径信息。html文件不会被删除。但是,如果需要显式启用此功能,请在.htaccess文件的顶部添加以下内容:

这将为所有URL启用路径信息

我的问题是:当我设置$config['uri\u protocol']=PATH\u INFO;常规URL停止运行,无论单击哪个站点页面URL,我都会看到主页

这可能是因为您实际上没有在RewriteRule指令中将URL路径作为path_INFO传递:

在这里,URL路径作为查询字符串传递,路径信息为空,这可以解释为什么所有请求都会出现在您的主页上。在这种情况下,您需要附加QSA标志才能附加任何附加内容 如问题中所述,请求中的所有查询字符串

要将URL路径作为路径信息(即其他路径名信息)传递,您需要删除?从重写规则替换。这样就不需要QSA标志,因为请求中的查询字符串将自动传递给替换

例如,要使用PATH_INFO,请按如下方式构造RewriteRule指令:

RewriteRule (.*) index.php/$1 [L]
regex.*与^.*$相同,因为默认情况下regex是贪婪的

请注意,您的服务器还必须配置为接受路径信息,否则它将触发自动404。默认情况下,这取决于关联的文件处理程序。默认情况下,与.php文件关联的处理程序将接受路径信息。html文件不会被删除。但是,如果需要显式启用此功能,请在.htaccess文件的顶部添加以下内容:


这将为所有URL启用路径信息。

嗨,阿诺,谢谢你的提示。它并没有完全解决问题,请参阅原始问题中的更新。您是否尝试删除后面的斜杠?1美元?你好,阿诺,谢谢你的小费。它并没有完全解决问题,请参阅原始问题中的更新。您是否尝试删除后面的斜杠?还有1美元?嘿,我刚通过谷歌找到这个问题。我的问题和你在这里描述的完全一样。我需要使用URL查询字符串,但如果我将$config['uri_protocol']更改为允许查询字符串工作所需的PATH_INFO,我的所有页面只需重定向到主页。现在,我遵循了您提供的链接,但我不理解您的解决方案,它似乎对我不起作用。我可以问一下您将$config['uri_protocol']设置为什么吗?您的.htaccess现在是什么样子?非常感谢对此很抱歉,我想出了一个解决方案hack:P。出于某种原因,我的主机不允许PATH_INFO变量。所以我只是将ORIG_PATH_INFO值复制到PATH_INFO变量中。瞧$_服务器['PATH_INFO']=$\u服务器['ORIG_PATH_INFO'];很好嘿,我刚通过谷歌找到这个问题。我的问题和你在这里描述的完全一样。我需要使用URL查询字符串,但如果我将$config['uri_protocol']更改为允许查询字符串工作所需的PATH_INFO,我的所有页面只需重定向到主页。现在,我遵循了您提供的链接,但我不理解您的解决方案,它似乎对我不起作用。我可以问一下您将$config['uri_protocol']设置为什么吗?您的.htaccess现在是什么样子?非常感谢对此很抱歉,我想出了一个解决方案hack:P。出于某种原因,我的主机不允许PATH_INFO变量。所以我只是将ORIG_PATH_INFO值复制到PATH_INFO变量中。瞧$_服务器['PATH_INFO']=$\u服务器['ORIG_PATH_INFO'];谢谢,这节省了我很多时间!谢谢,这节省了我很多时间!