codeigniter重写规则导致无限循环

时间:2013-05-02 21:55:21

标签: php apache .htaccess codeigniter mod-rewrite

我正在使用CodeIgniter,当我尝试访问我的页面时出现500服务器错误。 (https://test_page.com)重定向到 (https://test_page.com/auth/login)。 注意如何 (https://test_page.com/index.php/auth/login)仍然有效。

  1. 我正在使用HTTPS://,我不确定这是否有所作为。
  2. 我还为域名配置了我的站点可用文件以允许覆盖。
  3.   

    Codeigniter基目录:   的 /var/www/test_page.com/public_html

    我的apache错误日志说:

      

    由于可能,请求超出了10个内部重定向的限制   配置错误。使用'LimitInternalRecursion'来增加   必要时限制。使用“LogLevel debug”获取回溯。

    httpd.conf文件

    ServerName localhost
    
    <Directory /var/www/test_page.com/public_html>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
    </Directory>
    

    的.htaccess

    Options +FollowSymLinks All -Indexes
    
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /registration.naturebridge.org/
    
        RewriteCond %{REQUEST_URI} ^system.*
        RewriteRule ^(.*)$ index.php?/$1 [L]
    
        RewriteCond %{REQUEST_URI} ^application.*
        RewriteRule ^(.*)$ index.php?/$1 [L]
    
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /public_html/index.php?/$1 [L]
    </IfModule>
    
    <IfModule !mod_rewrite.c>
        ErrorDocument 404 index.php
    </IfModule>  
    

    配置文件:

    $config['base_url'] = 'https://test_page.com/';
    $config['index_page'] = '';
    $config['uri_protocol'] = 'REQUEST_URI';
    $config['url_suffix'] = '';
    

    解决方案

    编辑你的.htaccess以包含以下内容(还记得不要在Word或富文本格式编辑器中编辑它,因为它可能会添加额外的字符并给你编译错误。)

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
    
        RewriteCond %{REQUEST_URI} ^system.*
        RewriteRule ^(.*)$ /index.php?/$1 [L]
    
        RewriteCond %{REQUEST_URI} ^application.*
        RewriteRule ^(.*)$ /index.php?/$1 [L]
    
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php?/$1 [L]
    </IfModule>
    

1 个答案:

答案 0 :(得分:2)

Cargo-cult编程重写规则。 CodeIgniter提供了一个重写列表 - 为什么你必须修改它们。无论如何,让我们进行检查。

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ index.php?/$1 [L]

您的请求URI将以/开头,因此这与任何内容都不匹配。

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ index.php?/$1 [L]

相同。

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

您需要将这些内容重写为以下内容:

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

这将正确映射不是目录而不是文件的任何内容。但是, mod_rewrite 采用公共路径而不是文件路径(即使它确实存在,你的工作也不行 - / public_html /通常不是有效的linux路径)。

将最后一个更改为以下内容:

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

事情应该会好一点。无限循环是因为它映射/ blah到/public_html/index.php?/blah,它不存在,因此它尝试将/public_html/index.php?blah映射到/public_html/index.php?/public_html/index。 php?blah,哪个不存在......你明白了。