我有一个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有关的事情呢?
非常感谢!
答案 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/