修复WordPress网站500内部服务器错误
500内部服务器错误(最常见的原因):
WordPress中的500内部服务器错误可能由多种原因引起。如果您遇到这种情况,很有可能是以下一个(或多个)因素导致了问题:
- 浏览器缓存。
- 数据库登录凭据不正确。
- 损坏的数据库。
- WordPress安装中的文件损坏。
- 您的数据库服务器的问题。
- 损坏的WordPress核心文件。
- 第三方插件和主题的问题。
- 第三方插件的PHP超时或致命的PHP错误。
- 错误的文件和文件夹权限。
- 您的服务器上已用尽的PHP内存限制
- 损坏的.htaccess 文件。
- CGI和 Perl脚本错误。
1. 尝试重新加载页面
有时这会在您更新WordPress网站上的插件或主题后立即发生。通常这是在未正确设置的主机上。发生的事情是他们之后会遇到临时超时。但是,事情通常会在几秒钟内自行解决,因此您只需刷新即可。
2. 清除浏览器缓存
在深入调试站点之前,清除浏览器缓存始终是另一个很好的故障排除步骤。以下是有关如何清除各种浏览器中的缓存的说明:
- 如何强制刷新所有浏览器的单个页面
- 如何清除 Google Chrome 的浏览器缓存
- 如何清除 Mozilla Firefox 的浏览器缓存
- 如何清除 Safari 的浏览器缓存
- 如何清除 Internet Explorer 的浏览器缓存
- 如何清除 Microsoft Edge 的浏览器缓存
- 如何清除 Opera 的浏览器缓存
3. 检查您的服务器日志
您还应该利用您的错误日志。如果您是宝塔面板客户,则可以在宝塔面包你仪表盘的安全管理中的Web日志管理轻松查看错误。这可以帮助您快速缩小问题的范围,特别是如果它是由您网站上的插件引起的。
检查错误日志中的500内部服务器错误
如果您的主机没有日志记录工具,您还可以通过将以下代码添加到wp-config.php文件来启用日志记录来启用WordPress调试模式:
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true );
define( ‘WP_DEBUG_DISPLAY’, false );
日志通常位于/wp-content目录
WordPress错误日志文件夹 (SFTP)
您还可以查看Apache和Nginx中的日志文件,它们通常位于此处:
- Apache: /var/log/apache2/error.log
- Nginx: /var/log/nginx/error.log
如果由于PHP致命错误而显示500错误,您还可以尝试启用PHP错误报告。只需将以下代码添加到引发错误的文件中即可。通常,您可以在Google Chrome DevTools的控制台选项卡中缩小文件范围。
ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);
您可能还需要使用以下内容修改php.ini文件:
display_errors = on
4. 建立数据库连接时出错
500内部服务器错误也可能由数据库连接错误引起。根据您的浏览器,您可能会看到不同的错误。但无论在您的服务器日志中,两者都会生成500 HTTP状态代码。
以下是“建立数据库连接时出错”消息与浏览器相似的示例。整个页面是空白的,因为无法检索数据来呈现页面,因为连接工作不正常。这不仅会破坏您网站的前端,还会阻止您访问WordPress仪表盘。
建立数据库连接错误示例
那么究竟为什么会发生这种情况呢?好吧,以下是一些常见的原因。
- 最常见的问题是您的 数据库登录凭据不正确。您的 WordPress 站点使用单独的登录信息连接到其MySQL数据库。
- 您的WordPress数据库已损坏。有这么多带有主题、插件和用户不断删除和安装它们的活动部件,有时数据库会损坏。这可能是由于表丢失或个别损坏,或者某些信息可能被意外删除。
- 您的WordPress安装中可能有损坏的文件。由于黑客,有时甚至会发生这种情况。
- 您的数据库服务器的问题。Web主机端的许多事情可能是错误的,例如数据库因流量高峰而过载或因并发连接过多而无响应。这实际上对于共享主机很常见,因为它们为同一服务器上的许多用户使用相同的资源。
查看我们关于如何修复WordPress网站建立数据库连接的错误的深入文章。
5. 检查你的插件和主题
第三方插件和主题很容易导致500内部服务器错误。很多时候,您应该在安装新内容或运行更新后立即看到错误。这就是为什么我们总是建议使用暂存环境进行更新或至少一个一个地运行更新的原因之一。否则,如果您遇到500内部服务器错误,您会突然争先恐后地找出是哪个错误造成的。
解决此问题的几种方法是停用所有插件。请记住,如果您只是停用插件,您不会丢失任何数据。如果您仍然可以访问您的管理员,一个快速的方法是浏览到“插件”并从批量操作菜单中选择“停用”。这将禁用您的所有插件。
停用所有插件
如果这解决了问题,您将需要找到罪魁祸首。开始一一激活它们,每次激活后重新加载站点。当您看到500内部服务器错误返回时,您就发现了行为不端的插件。然后,您可以联系插件开发人员寻求帮助或在WordPress插件库中发布技术支持留言。
如果您无法登录WordPress管理盘,您可以通过FTP进入您的服务器并将您的插件文件夹重命名为 plugins_old 之类的名称。然后再次检查您的网站。如果它有效,那么您将需要一个一个地测试每个插件。将您的插件文件夹重命名回“plugins”,然后将每个插件文件夹一一重命名,直到找到为止。您也可以先尝试在临时站点上复制此内容。
重命名插件文件夹
始终确保您的插件、主题和WordPress核心是最新的。并检查以确保您运行的是受支持的PHP版本。如果结果证明与插件中的错误代码有冲突,您可能需要找技术人员协助解决问题。
6. 重新安装WordPress核心
有时WordPress核心文件可能会损坏,尤其是在旧站点上。在不影响插件或主题的情况下重新上传WordPress核心实际上很容易。我们有一个深入的指南,其中包含5种不同的方法来重新安装WordPress。当然,请确保在继续之前进行备份。跳到以下部分之一:
- 如何在保留现有内容的同时从WordPress仪表盘重新安装WordPress
- 如何在保留现有内容的同时通过FTP手动重新安装 WordPress
- 如何在保留现有内容的同时通过WP-CLI手动重新安装 WordPress
7. 权限错误
服务器上的文件或文件夹的权限错误也可能导致发生500内部服务器错误。以下是有关WordPress中文件和文件夹权限的一些典型权限建议:
- 所有文件都应该是644 (-rw-r–r–) 或640。
- 所有目录都应该是755 (drwxr-xr-x) 或750。
- 任何目录都不应该被赋予777,即使是上传目录。
- 强化: wp-config.php也可以设置为440或400以防止服务器上的其他用户读取它。
有关 更深入的解释,请参阅有关更改文件权限的WordPress Codex文章 。
您可以使用FTP客户端轻松查看您的文件权限(如下所示)。您还可以联系您的WordPress主机支持团队,并要求他们快速获取文件夹和文件的GREP文件权限,以确保它们设置正确。
文件权限SFTP
8. PHP内存限制
耗尽服务器上的PHP内存限制也可能导致500内部服务器错误。您可以尝试增加限制。请按照以下说明更改cPanel、Apache、php.ini文件和wp-config.php
文件中的此限制。
增加cPanel中的PHP内存限制
如果您在使用cPanel的主机上运行,则可以从 UI 轻松更改此设置。在“软件”下单击“选择PHP版本”。
选择PHP版本
单击“切换到PHP选项”。
文件权限SFTP
然后,您可以单击该memory_limit
属性并更改其值。然后点击“保存”。
增加cPanel中的PHP内存限制
增加Apache中的PHP内存限制
.htaccess
文件是一个特殊的隐藏文件,其中包含可用于修改服务器行为的各种设置,一直到目录特定级别。首先通过FTP或SSH登录您的站点,查看您的根目录,看看那里是否有.htaccess
文件。
.htaccess文件
如果有,您可以编辑该文件以添加必要的代码以增加PHP内存限制。很可能设置在64M或以下,您可以尝试增加此值。
php_value memory_limit 128M
增加php.ini文件中的PHP内存限制
如果上述方法对您不起作用,您可以尝试编辑您的php.ini
文件。通过FTP或SSH登录到您的站点,转到站点的根目录并打开或创建一个php.ini
文件。
php.ini文件
如果文件已经存在,请搜索三个设置并在必要时修改它们。如果您刚刚创建了文件,或者找不到设置,您可以粘贴下面的代码。您当然可以修改这些值以满足您的需要。
memory_limit = 128M
某些共享主机可能还要求您在.htaccess
文件中添加 suPHP 指令以使上述php.ini
文件设置生效。为此,请编辑.htaccess
同样位于站点根目录下的文件,并将以下代码添加到文件顶部:
<IfModule mod_suphp.c>
suPHP_ConfigPath /home/yourusername/public_html
</IfModule>
如果上述方法对您不起作用,则可能是您的主机锁定了全局设置,而是将其配置为使用.user.ini
文件。要编辑您的.user.ini
文件, 请通过FTP或SSH登录到您的站点,转到您站点的根目录并打开或创建一个.user.ini
文件。然后,您可以粘贴以下代码:
memory_limit = 128M
在wp-config.php中增加PHP内存限制
最后一个选项,如果所有其他方法都失败了,您可以试一试。首先,通过FTP或SSH登录到您的站点,然后找到您的wp-config.php文件,该文件通常位于您站点的根目录中。
wp-config.php文件
将以下代码添加到wp-config.php
文件的顶部:
define(‘WP_MEMORY_LIMIT’, ‘128M’);
您还可以询问您的主机是否遇到内存限制问题。你也可以使用New Relic和其他故障排除方法来帮助客户缩小可能会耗尽限制的插件、查询或脚本的范围。您还可以使用您自己的自定义New Relic密钥。
使用New Relic调试
9. .htaccess文件的问题
如果您使用的是运行Apache的WordPress主机,则很可能您的.htaccess
文件有问题或已损坏。按照以下步骤从头开始重新创建一个新的。
首先,通过FTP或SSH登录到您的站点,并将您的.htaccess
文件重命名为.htaccess_old
.
重命名 .htaccess文件
通常要重新创建此文件,您只需在WordPress中重新保存固定链接即可。但是,如果您遇到500内部服务器错误,您很可能无法访问您的WordPress管理员,因此这不是一个选项。因此,您可以创建一个新.htaccess
文件并输入以下内容。然后将其上传到您的服务器。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
有关更多示例,请参阅[WordPress odex,例如multisite的默认.htaccess
文件。
10. CGI/Perl脚本中的编码或语法错误
由CGI和Perl中的错误引起的500错误比以前少了很多。虽然还是值得一提的,尤其是对于那些使用cPanel的人来说,那里还有很多一键CGI脚本还在使用。正如Stack Overflow上的AEM所说:
CGI已经被各种各样的Web编程技术所取代,包括PHP、各种Apache扩展(如mod_perl)、各种风格的Java和框架(包括Java EE、Struts、Spring等),基于Python的框架(如Django、Ruby on Rails等)其他Ruby框架和各种Microsoft技术。
以下是使用CGI脚本时的一些提示:
- 编辑时,始终使用纯文本编辑器,例如Atom、Sublime或Notepad++。这确保它们保持ASCII格式。
- 确保chmod 755的正确权限用于CGI脚本和目录。
- 将ASCII模式的CGI脚本(可以在FTP编辑器中选择)上传到服务器上的cgi-bin目录中。
- 确认您的脚本所需的Perl模块已安装并受支持。
11. 服务器问题(请咨询您的主机)
最后,由于PHP超时或第三方插件的致命PHP错误也可能导致500内部服务器错误,因此您可以随时查看您的WordPress主机。有时,如果没有专家,这些错误可能很难解决。以下是一些常见错误示例,这些错误会在服务器上触发500 HTTP状态代码,可能会让您摸不着头脑。
PHP message: PHP Fatal error: Uncaught Error: Call to undefined function mysql_error()…
PHP message: PHP Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in /www/folder/web/shared/content/plugins/plugin/functions.php:525
PHP超时也可能由于缺少PHP工作器而发生,尽管通常这些会导致504错误,而不是500错误。这些决定了您的站点在给定时间可以处理的并发请求数。简而言之,您网站的每个未缓存请求都由PHP Worker处理。
当PHP工作人员已经在站点上忙碌时,他们开始建立队列。一旦达到PHP工作线程的限制,队列就会开始推出较旧的请求,这可能会导致500错误或不完整的请求。
监控您的网站
如果您担心将来在您的网站上发生这些类型的错误,您还可以使用updown.io之类的工具 来监控并在发生时立即通知您。它会定期向您选择的URL发送HTTP HEAD请求。您可以简单地使用您的主页。该工具允许您设置以下检查频率:
- 15 秒
- 30秒
- 1分钟
- 2分钟
- 5分钟
- 10分钟
如果您的网站出现故障,它会向您发送一封电子邮件。下面是一个例子。
500错误的电子邮件通知
如果您正在尝试调试有问题的插件或在共享主机上,这些主机往往会使服务器过度拥挤,这将特别有用。这可以让您证明您的网站实际上可能关闭的频率(即使是在半夜)。
小结
500内部服务器错误总是令人沮丧,但希望现在您知道了一些其他方法来解决这些错误,以快速使您的站点恢复运行。请记住,这些类型的错误通常是由第三方插件、致命的PHP错误、数据库连接问题、.htaccess文件或PHP内存限制问题以及有时PHP超时引起的。