我在我们的 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 内部服务器错误 - 因为它在语法上无效。