Wordpress“您的网站出现严重错误”

Wordpress“您的网站出现严重错误”

我在我们的 Wordpress 网站的登录页面上收到以下错误: 您的网站出现严重错误。请查看网站管理员电子邮件收件箱以获取说明。

在搜索互联网和日志文件后,我认为这是由 Apache 日志中的以下错误引起的:AH00124:由于可能的配置错误,请求超出了 10 次内部重定向的限制。如有必要,请使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。

.htaccess 文件中似乎有一个循环。我的问题是我对 mod_rewrite 一无所知。有谁能帮我找到并删除 .htacccess 文件中的循环(如果有)?以下是文件。

谢谢你们。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# force https
#RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]**

答案1

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]

这些指令可以触发重写循环(一些服务器配置*1) 如果提出以下形式的请求/subdirectory/wp-content/foo/subdirectory是可选的),其中/wp-content/foo不存在。

这些指令的目的是将对 WordPress 子站点(在虚拟子目录中)的请求内部重写到安装根目录中的多站点核心并停止进一步处理,从而防止请求被路由到 WP 前端控制器。*1然而,一些服务器配置重写引擎正在检测改变在后续传递中,URL 中的内容将保持不变,因此重写过程将永不停止。如果文件存在,则前面的规则将阻止进一步处理,并且不会发生重写循环。

了解更多有关您的服务器配置的信息,并在启用 mod_rewrite 跟踪的情况下查看服务器错误日志的摘录将会很有帮助,并可能带来更好的解决方案。

在此文件的上下文中解决该问题.htaccess

尽管“解决”这个问题意味着可能会出现 404 错误。(但最终用户是否看到这一点又是另一回事。)

值得尝试的事情...任何以下。但是,对您而言实用的内容可能取决于您的文件结构:

  • 删除该RewriteBase /指令。无论如何,当前文件中不需要该指令.htaccess。存在会RewriteBase导致上述重写被写入 URL 路径,而不是文件系统路径。(尽管我并不一定会期望这会产生重写循环,不像当根相对路径包含在代换字符串本身。

  • L将这两个指令上的标志更改为END(需要 Apache 2.4+)。这将停止所有进一步的重写处理。重写引擎不会重新启动,从而防止重写循环。

  • 如果您已经直接向根发出此格式的请求,而不是,/subdirectory那么您可以$2更改代换字符串到-(单个连字符)。这表示没有替换,也没有发生重写循环。(参见我的答案相关问题了解详细信息。

  • 为了避免对现有指令进行任何更改,您可以添加几个例外到文件顶部,现有指令:

    RewriteRule ^wp-(content|admin|includes) - [L]
    RewriteRule \.php$ - [L]
    

    这避免了任何已被提及的指令重写的请求进一步经过重写过程。

参考:
这个 wordpress .htaccess 规则有什么作用?


RewriteRule . index.php [L]**

您的问题中似乎存在 markdown 格式错误,但**否则应该删除这些尾随。这会因其他原因导致 500 内部服务器错误 - 因为它在语法上无效。

相关内容