web-dev-qa-db-ja.com

Apache 2.4-構成エラーの可能性があるため、リクエストが10の内部リダイレクトの制限を超えました

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書き換えのエラーに起因していると思います。

この投稿を見る: リクエストの可能性があります構成エラーのために10の内部リダイレクトの制限を超えました。?

彼らはこれを置き換えることを提案します:

# 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

誰かが私が変更する必要があるものを提案できますか?

19
iltdev

次のルールが原因でループが発生する可能性が最も高くなります。

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

コメントアウトして、新しいブラウザで再試行してください。

14
anubhava

この問題は、存在しない特定のファイルに対する要求が原因で発生する可能性があります。たとえば、ファイルが存在しない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によって提供されるデフォルトのルールは完全に動作します。

24
Justin Samuel

以下を追加してこれを解決しました

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