1

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

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

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>
4

1 回答 1

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 ,它不存在......你明白了。

于 2013-05-02T22:04:20.023 回答