CodeIgniter 500 内部服务器错误
Posted
技术标签:
【中文标题】CodeIgniter 500 内部服务器错误【英文标题】:CodeIgniter 500 Internal Server Error 【发布时间】:2011-11-14 17:26:15 【问题描述】:我下载了一个使用 CodeIgniter 编写的 php 脚本。当我从 localhost 运行它时,转到 admin 文件夹时,它再次显示 localhost。此外,当从我的网络主机运行时,它会显示 500 内部服务器错误。
我从http://localhost/myproj 运行该站点,它可以工作。然后,当我尝试转到位于 http://localhost/myproj/administrator 的管理页面时,它会给出 500 内部服务器错误。
我在这里读到这可能是由于 .htaccess 文件中的代码错误。这是我目前的 .htaccess 文件
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
RewriteCond %REQUEST_URI ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
# Without mod_rewrite, route 404's to the front controller
ErrorDocument 404 /index.php
请帮助我。我知道这可能是一个很小的问题,但我找不到错误。
【问题讨论】:
【参考方案1】:500错误的问题(使用CodeIgniter),不同的apache设置,当PHP配置出错时显示500错误。
下面是它如何使用 CodeIgniter 触发 500 错误:
-
脚本错误(PHP 配置错误、缺少包等)
PHP“致命错误”
请检查你的 apache 错误日志,里面应该有一些有趣的信息。
【讨论】:
谢谢,这帮助我弄清楚服务器的 rewrite_module 没有加载。 这也帮助了我,原来我安装的一个钩子正在使用一个未加载的助手函数!那是我生命中我想要回来的调试时间。 请检查您的 apache 错误日志 +1 我只是在看到这个之前无法找出我的错误是什么 错误日志起到了作用。在 Ubuntu 16.04 中,可以在 /var/log/apache2 找到 apache 日志 谢谢,在centos7这个问题我在/var/log/httpd上找到了原因【参考方案2】:以防万一其他人偶然发现这个问题,我继承了一个较旧的 CodeIgniter 项目并且在安装它时遇到了很多麻烦。
我浪费了大量时间尝试创建站点的本地安装并尝试了所有方法。最后,解决方案很简单。
问题在于较旧的 CodeIgniter 版本(如 1.7 及更低版本)不适用于 PHP 5.3。解决方案是切换到 PHP 5.2 或更旧的版本。
【讨论】:
【参考方案3】:您正试图从您的网站 URL 中删除 index.php,对吗?
尝试将$config['uri_protocol']
设置为REQUEST_URI
而不是AUTO
。
【讨论】:
非常感谢。经过数小时的搜索,这是我的解决方案的问题【参考方案4】:对你的 .htaccess 文件试试这个:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule >
【讨论】:
【参考方案5】:删除 httpd.conf(apache 配置文件)中的注释:
LoadModule rewrite_module modules/mod_rewrite.so
【讨论】:
【参考方案6】:每当我在子目录中运行 CodeIgniter 时,我都会将 RewriteBase
设置为它。尝试将其设置为 /myproj/
而不是 /
。
【讨论】:
试过了。但仍然是同样的错误。当我检查我的网络主机上的日志文件时,我看到以下错误。严重性:注意 --> 未定义索引:LOGIN_USERNAME/config/config.php
中的 $config['base_url']
和 $config['uri_protocol']
设置为什么?另外,LOGIN_USERNAME
是在您的 CI 代码中还是在您的 Web 根目录中?
$config['base_url'] = "localhost/myproj"; $config['uri_protocol'] = "AUTO";我从代码中删除了 LOGIN_USERNAME 变量。
尝试清除base_url
。此外,在您的/index.php
文件中确保define('ENVIRONMENT', 'development');
设置为development
,并且在您的php.ini
中您的display_errors
设置为On
。
尝试了一切,但仍然没有运气。我也面临同样的问题。【参考方案7】:
我知道我迟到了,但这会对某人有所帮助。
检查重写引擎是否为enabled。
如果没有,开启重写引擎并重启服务器。
sudo a2enmod rewrite
sudo service apache2 restart
【讨论】:
【参考方案8】:如果 wampserver 版本 2.5 则将 apache 配置更改为
httpd.conf(apache配置文件): 来自
#LoadModule rewrite_module modules/mod_rewrite.so**
到,删除#
LoadModule rewrite_module modules/mod_rewrite.so**
这对我来说很好
【讨论】:
【参考方案9】:确保你的根index.php
文件有正确的权限,它的权限必须是0755
或0644
【讨论】:
【参考方案10】:晚了,但是,我认为 CodeIgniter 中 500 个内部服务器错误的最佳方法是在 config 文件夹中的 Config.php 文件中启用错误日志功能并设置一个阈值,即 $config[' log_threshold'] = 1,2,3,4,具体取决于您要查看的日志。
【讨论】:
【参考方案11】:这可能与此线程不再相关,但希望对某人有所帮助。 在过去的一个小时里,我有 500 个错误,因为我的控制器返回了一个不受我(糟糕)服务器上运行的 php 版本支持的数组。看起来微不足道,但具有 codeigniter 错误的特征。
我不得不使用:
class emck_model extends CI_Model
public function getTiles()
return array(...);
代替
class emck_model extends CI_Model
public function getTiles()
return [...];
干杯
【讨论】:
【参考方案12】:这对我来说很好用
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule >
【讨论】:
以上是关于CodeIgniter 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章