CodeIgniter Mod_Rewrite问题 - URL仅显示索引

时间:2011-01-25 15:20:02

标签: php .htaccess codeigniter mod-rewrite

我有一个CI应用程序,在切换服务器之后,似乎没有正确路由。

在我的配置中我有

$config['uri_protocol'] = "PATH_INFO";
$config['enable_query_strings'] = TRUE;

这应该允许查询字符串参数和网址段。

所以这应该在理论上起作用(因为它在旧服务器上):

http://www.domain.com/register?param=something

然而,无论我去哪个URL,它都只显示索引。

所以如果我去http://www.domain.com/register

它在地址栏中显示,但它没有得到寄存器控制器,它显示索引。

如果我将'uri_protocol'更改为REQUEST_URI,它可以正常工作。但是查询字符串参数不会。

我的.htaccess是

DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico|license.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA] 

RewriteCond %{QUERY_STRING} .
RewriteRule ^$ /? [L]  

任何想法可能是什么问题?就像我说的,它在不同的服务器上工作。所以,我正在考虑与apache有关的事情呢?

非常感谢!

2 个答案:

答案 0 :(得分:2)

我猜,RewriteCond $1永远不会评估为真,也不会发生重定向。

实际上,您可以将这两行减少为一行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

就足够了
RewriteCond %{REQUEST_FILENAME} !-f

由于-f测试检查文件目录。如果仍无法产生预期结果,请检查PATH_INFO中的ORIG_PATH_INFO$_SERVER是否确实存在。

答案 1 :(得分:0)

尝试删除index.php

之前的./
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

你实际上应该只使用这些行

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

如果您在目录中有codeigniter,则可能需要根据您的服务器设置添加重写基本指令。

RewriteBase /directory/