【问题标题】:Apache 2.4 - Request exceeded the limit of 10 internal redirects due to probable configuration errorApache 2.4 - 由于可能的配置错误,请求超出了 10 个内部重定向的限制
【发布时间】:2014-05-10 12:14:27
【问题描述】:

我在 windows Server 2008 R2 Enterprise 上运行 Apache 2.4(64 位)和 PHP 5.4.15,并注意到 Apache 错误日志中出现以下错误:

AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

我正在运行 WordPress 的多站点安装,我认为错误来自 htaccess 重写中的错误。

看这篇文章: Request exceeded the limit of 10 internal redirects due to probable configuration error.?

他们建议替换这个:

# BEGIN Wordpress
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>
# END WordPress

这段代码由 Scott Yang 提供:

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.+)$ /index.php/$1 [L,QSA]
</IfModule>

但是,我的 WordPress htaccess 看起来有点不同,所以我不想替换我的代码以防万一我不小心替换了我需要的东西。

这是我的 htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
Options +FollowSymLinks -MultiViews
Header set Access-Control-Allow-Origin "*"
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress

谁能建议我需要改变什么?

【问题讨论】:

    标签: regex wordpress apache .htaccess url-rewriting


    【解决方案1】:

    通过添加以下内容解决了这个问题:

    RewriteCond %{ENV:REDIRECT_STATUS} 200 [OR]
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    

    【讨论】:

    • 那么您在RewriteCond %{REQUEST_FILENAME} -f [OR] 之前添加的RewriteCond %{ENV:REDIRECT_STATUS} 200 [OR] 的更改是什么?
    • FWIW,这个解决方案似乎适用于大量基于 this GitHub Gist here 的人:'WordPress 多站点:如何修复错误“请求超出 10 个内部重定向的限制”'
    【解决方案2】:

    在我们的例子中,编辑器使用相同的 slug 创建了自定义帖子类型和自定义内容类型。我们通过删除一个并重新保存 [ WordPress › 工具 › 设置 ] 中的永久链接来修复它。

    希望这对任何人都有帮助。

    【讨论】:

      【解决方案3】:

      此问题可能是由对某些不存在的文件的请求引起的。例如,对 wp-content/uploads/ 中文件不存在的文件的请求。

      如果这是您看到的情况,您可以通过转到 .htaccess 并更改此行来解决问题:

      RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
      

      到:

      RewriteRule ^(wp-(content|admin|includes).*) - [L]
      

      根本问题是上面的规则触发了对前面带有斜杠的完全相同的 url 的重写,并且由于进行了重写,新重写的请求再次通过规则返回并触发了相同的规则。通过将该行的“$1”更改为“-”,不会发生重写,因此重写过程不会以相同的 URL 重新开始。

      可能 apache 2.2 和 2.4 处理这种情况的方式有所不同,即前面唯一的区别是斜杠,这就是 WordPress 提供的默认规则不能完美运行的原因。

      【讨论】:

      • 谢谢贾斯汀。信息量很大。那么你认为最好保留重写规则(用 - 而不是 $1)而不是注释掉它?
      【解决方案4】:

      由于这些规则,您很可能会进入循环:

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

      只需将其注释掉,然后在新浏览器中重试。

      【讨论】:

      • 注释掉RewriteRule ^(wp-(content|admin|includes).*) $1 [L]也。
      • 谢谢,阿努巴瓦。我会让你知道情况如何。该消息有时需要一段时间才能再次出现在日志中。
      • 我还添加了 LogLevel rewrite:trace3 到 httpd.conf 所以希望能显示一些东西。
      • 谢谢,阿努巴瓦。看起来像注释掉 RewriteRule ^(wp-(content|admin|includes).*) $1 [L]RewriteRule ^(.*\.php)$ $1 [L] 解决了这个问题。非常感谢您的帮助:)
      • 有谁知道为什么这两个重写规则存在?我在wordpress.stackexchange.com/questions/352817/… 上创建了一个问题来解决这个问题,并希望得到任何意见。
      猜你喜欢
      • 2018-08-21
      • 2012-05-03
      • 2010-12-09
      • 1970-01-01
      • 2017-09-23
      相关资源
      最近更新 更多