CodeIgniter在服务器上的子文件夹中重定向循环

时间:2011-03-13 00:26:38

标签: codeigniter

当我将文件从localhost部署到我的服务器时,我遇到了重定向循环。

Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

该网站是多语言的,我正在使用.htaccess文件从uri中删除index.php。我正在尝试将网站部署到我的域中的子文件夹(即http://www.mydomain.com/subfolder),理想情况下我想要这样的网址(http://www.mydomain.com/subfolder/en/welcome)

我的.htaccess文件:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

我也尝试过:

RewriteEngine on
RewriteBase /subfolder/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

我的config.php:

$config['base_url'] = 'http://www.mydomain.com/subfolder/';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';

我的routes.php:

$route['default_controller'] = "home";
$route['404_override'] = '';

$route['^../products/(:num)'] = "products/products_list/index/$1";
$route['^../products'] = "products/products_list/index";

$route['^../products/detail/(:num)'] = "products/product/index/$1";
$route['^../(.+)$'] = "$2";

最后是i18n的MY_Config课程:

class MY_Config extends CI_Config {

function site_url($uri = '')
{    
    if (is_array($uri))
    {
        $uri = implode('/', $uri);
    }

    if (function_exists('get_instance'))        
    {
        $CI =& get_instance();
        $uri = $CI->lang->localized($uri);            
    }

    return parent::site_url($uri);
}

}

此设置在我的本地环境中正常工作,我通过http://local.subfolder.com访问,我设置了一个虚拟主机来执行此操作,但是当我在子文件夹中部署到服务器时,此设置不起作用。

如果有人可以指出问题所在,我会很高兴的。对于这篇长篇文章感到抱歉,但希望尽可能多地提供信息。

提前致谢

2 个答案:

答案 0 :(得分:1)

我尝试从RewriteBase

中删除尾部斜杠
RewriteBase /subfolder

并修改您的RewriteCond

RewriteEngine On
RewriteBase /subfolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

我注意到在?之前使用/$1似乎有时也会在CI中使用。

非常有用的文档: http://codeigniter.com/wiki/mod_rewrite/

答案 1 :(得分:0)

如果您想将htaccess用于特定文件夹,请将您的htaccess放在该文件夹中。例如,

如果您使用五个虚拟主机,如v1,v2,v3,v4,v5。如果你想在v3中使用你的htaccess,只需将该文件放在该文件夹中即可。