2016-02-12 20 views
5

私は、クラス内の設定APIを使用するWordPressプラグインを作成しています。WordPressマルチサイト、カスタムwpコンテンツフォルダ、リクエストが10回の内部リダイレクトの上限を超えました

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. 
:だからクラスは、私は私のログに次のエラーでサーバーエラーを取得するフォームを送信しようとする場合を除き、うまく機能しているクラスの中からregister_settings()、add_settings_field()、およびadd_settings_section()を呼び出し

私のWordPressのインストールは少し奇妙です。それはMark Jaquith's WordPress Skeleton repoに基づいて、私は自分のwp-contentフォルダを移動しました。私のwp-config.phpファイルはWordPressの外に移動しました。

WordPressからVagrantを実行しているため、サーバーの設定に問題がある可能性があります。しかし、私はちょうど標準のWordPressのインストールとその完全に動作しているVVVで自分のプラグインを使用しようとしました。

私のWordPressのディレクトリこの(作曲アプリのディレクトリにWPをインストールする)ようになっています。私はペーストビンに私の書き換えのログを追加した

index.php 
wp-config.php 
wp-content/ 
app/ 

http://pastebin.com/QKCFjULZ

私の.htaccessファイルは、次のようになります:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule . - [L] 


RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] 

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


RewriteRule . /index.php [L] 

Options -indexes 
</IfModule> 
# END WordPress 
+0

に書き換えられます私はクラスの問題されていないにそれを絞り込むました。クラスの外ですべての設定API関数を移動し、標準的な方法でそれらをロードしました。 – rugbert

答えて

1

あなたは、これらの規則の

0リダイレクトループを持っています

実際、書き換え後もルールは評価されることに注意してください。したがって、/something/wp-xxx/yyy/zzzがある場合は、内部的には/app/wp-xxx/yyy/zzzに書き換えられます。しかし、今見たように、あなたのルールは新しいuri /app/wp-xxx/yyy/zzzと再び一致します。あなたのログ

applying pattern '^([_0-9a-zA-Z-]+/)?(wp-.*)' to uri 'wp-admin/network/options.php', 
rewrite 'wp-admin/network/options.php' -> '/app/wp-admin/network/options.php', 

を見

証明、そして、あなたは

applying pattern '^([_0-9a-zA-Z-]+/)?(wp-.*)' to uri 'app/wp-admin/network/options.php', 
rewrite 'app/wp-admin/network/options.php' -> '/app/wp-admin/network/options.php', 

を持っており、それが延々と続く... 10のリダイレクト

の限界までこの動作を回避するにはルールが必要ないときに評価されないように、ルールにいくつかの制限を加える必要があります。

RewriteRule ^((?!app/)[^/]+/)?(wp-.+)$ /app/$2 [L] 

最後に、あなたのhtaccessファイルは、この

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

# Rule 1 
RewriteRule ^([^/]+/)?files/(.+)$ wp-includes/ms-files.php?file=$2 [L] 

# Rule 2 
RewriteRule ^((?!app/)[^/]+/)?(wp-.+)$ /app/$2 [L,QSA] 

# Rule 3 
RewriteRule ^((?!app/)[^/]+/)?(.+\.php)$ /app/$2 [L,QSA] 

RewriteRule^index.php [L] 

Options -Indexes 
</IfModule> 
# END WordPress 

リマインダーのようになります。簡単な回避策は、必ず現在の要求がないそれを書き換える前に/app/で始まらない作るために否定先読みパターンを用いることであろう:3つのルールは、存在しないファイル/フォルダに対してのみ実行されます。

例:

  • http://domain.tld/files/somethingまたは http://domain.tld/xxx/files/somethingは内部ルール1
  • http://domain.tld/wp-something/somethingelseまたはhttp://domain.tld/xxx/wp-something/somethingelsexxxapp除いて何もすることができる場所)に /wp-includes/ms-files.php?file=somethingのおかげで、内部で/app/wp-something/somethingelseに書き換えられます書き換えられますおかげでルール2
  • http://domain.tld/file.phphttp://domain.tld/xxx/file.phpxxxapp除いて何もすることができます)、内部ルールへ/app/file.phpおかげで3
+0

これをありがとう、申し訳ありませんが、私は返信を逃した。したがって、追加したルールは再帰エラーを解決しませんでした。 ブラウザのURLが/ appを含むように変更されていないことに気付きました RewriteCondの意味は何ですか? %{THE_REQUEST}にそのパターンが含まれている場合は、/ appで置き換えますか? – rugbert

+0

もう一度あなたの質問を読んで、私は何か気づいて、私の答えのコードを変更しました。一番下の例を注意深く読んで、あなたが期待している動作に対応しているかどうか教えてください。とにかく、何をしても、このコードでループしていない** –

+1

ありがとう!いいえ、私の再帰エラーはありません。サイトは高速です。 – rugbert

関連する問題