我正在使用CodeIgniter,当我尝试访问我的页面时出现500服务器错误。 (https://test_page.com)重定向到 (https://test_page.com/auth/login)。 注意如何 (https://test_page.com/index.php/auth/login)仍然有效。
Codeigniter基目录: 的 /var/www/test_page.com/public_html
我的apache错误日志说:
由于可能,请求超出了10个内部重定向的限制 配置错误。使用'LimitInternalRecursion'来增加 必要时限制。使用“LogLevel debug”获取回溯。
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>
答案 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,哪个不存在......你明白了。