4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPress で記事プレビュー画面がリダイレクトループする件

Posted at

WordPress でリダイレクトループってもはやあるある過ぎて・・・

「WordPress アドレス (URL)」と「サイトアドレス (URL)」を変えただけでもリダイレクトループにはまるケースがありますが、今回はまた別の要因。

Summary

  • WordPressの記事投稿プレビューが見れなかった
  • リバースプロキシかけてリクエストURI変えると事故りますよ注意してね

Details

プレビューが見れない

管理画面で記事を投稿する際、右カラムに「プレビュー」というボタンがあります。
ここを押した時、本来であれば現在投稿している記事のプレビューが見れるはずなのですが・・・

見れないと。Chrome の Network で見てみると、どうやらリダイレクトループしていると。

なんで?

あろうことか 301 リダイレクトをしてくれているので、301 で検索した所見事に引っかかりました。

wp-includes/canonical.php
446   $redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url );
447 
448   if ( !$redirect_url || $redirect_url == $requested_url ) // yes, again -- in case the filter aborted the request
449     return false;
450 
451   if ( $do_redirect ) {
452     // protect against chained redirects
453     if ( !redirect_canonical($redirect_url, false) ) {
454       wp_redirect($redirect_url, 301); // <= こいつ
455       exit();
456     } else {
457       // Debug
458       // die("1: $redirect_url<br />2: " . redirect_canonical( $redirect_url, false ) );
459       return false;
460     }
461   } else {
462     return $redirect_url;
463   }

どうも正規化をしてくれているはずの箇所で、どうも誤判定している?
しかしちょっと待て、ちょっと上を見てみると・・・

448   if ( !$redirect_url || $redirect_url == $requested_url ) // yes, again -- in case the filter aborted the request
449     return false;

ご丁寧に書いてくださってるではないか。
request_urlredirect_url がどっかのタイミングで別物になってるからいつまで経ってもここを抜けだせないのね。

原因を遡ると・・・

wp-includes/canonical.php
 45   if ( !$requested_url ) {
 46     // build the URL in the address bar
 47     $requested_url  = is_ssl() ? 'https://' : 'http://';
 48     $requested_url .= $_SERVER['HTTP_HOST'];
 49     $requested_url .= $_SERVER['REQUEST_URI'];
 50   }

お前か。$request_urlを自動作成しやがって。

原因は?

リバースプロキシがそもそもの原因でした。

訳あってwebサーバA からプロキシかけてwebサーバB(WordPress)に飛ばしていたのですが、その際に rewrite かけて リクエストURI を変えてしまっていたのが問題。

という訳で、泣く泣く webサーバB 側でゴニョゴニョするハメに・・・。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?