我将 WordPress 网站迁移到新主机,我对 WordPress 页面进行了一些编辑并尝试保存页面。当我使用 google chrome 控制台调试问题时,它给了我以下错误
“Failed to load resource: the server responded with a status of 403 ()”
with the route “wp-admin/admin-ajax.php:1”
尝试了下面列出的所有解决方案后,我能够使用解决方案 6 修复它。
403 禁止意味着您的浏览器无法加载脚本,因为您的服务器不允许。这是一个很难解决的问题。因为任何事情都可能阻塞服务器。因此 403 禁止错误非常模糊,错误日志可能会给你线索。
解决方案 1 – 这很可能是服务器权限/所有权问题。如果是权限问题,它可能会告诉您哪个文件的权限不正确,因此请询问您的主机发生了什么事。如果您使用的是 cPanel,以下教程提供了有关 cPane 中错误日志的更多信息:如何查看 cPanel 错误日志
解决方案 2 – 如果问题是文件权限,您可以按照以下文章中的步骤了解如何修改文件权限:如何在 cPanel 中更改文件权限https://codex.wordpress.org/Changing_File_Permissions
解决方案 3 – 另一个可能的原因可能是 .htaccess 文件损坏。另请检查您的 .htaccess 文件是否有任何奇怪的情况。
解决方案 4 – 确保您的服务器设置不会覆盖 .htaccess 文件。
解决方案 5 – 另一个可能的原因可能是服务器设置的更改(意外或其他原因)。请咨询您的托管提供商。
解决方案 6 -最后但并非最不重要的解决方案,禁用该域的 mod 安全性。
我在迁移到 Dinahosting 时也遇到了同样的错误(admin-ajax.php?lang=es 403)。此问题是由于 ModSecurity 造成的,它是作为 Apache 模块运行的 Web 应用程序防火墙 (WAF)。由于我的服务器是 plesk 分片,因此我们无法完全禁用 ModSecurity。但是,可以通过 .htaccess 禁用特定规则。
仔细查看Apache错误日志后,发现错误是由以下ModSecurity规则引起的:
- Rule ID 932100: REQUEST-932-APPLICATION-ATTACK-RCE
- Rule ID 949110: REQUEST-949-BLOCKING-EVALUATION
要解决此问题,请检查 Apache 错误日志以识别有问题的规则。然后,将以下代码添加到您的 .htaccess 文件中,如下所示。
<IfModule mod_security2.c>
SecRuleRemoveById 932100
SecRuleRemoveById 949110
</IfModule>
但是,我不建议通过.htaccess 永久禁用这些规则。如果可能的话,最好在代码级别解决问题。