【RedirectMatchでwordpressの管理画面を除外】サブディレクトリ・サブドメインの時は注意

実現したい事

お名前ドットコムのサブディレクトリ「news」で運用しているwordpressだけを、 XSERVERにサブドメインとしてお引越ししたい

移転前(サブディレクトリ)

URL:https://example.com/news

wordpress設置個所:example.com/news/wp

サーバー:お名前ドットコム共用サーバー

移転後(サブドメイン)

URL:https://news.example.com

wordpress設置個所:example.com/news

サーバー:XSERVER

RedirectMatchで特定のディレクトリを除外する方法

通常RedirectMatchを用いて特定のディレクトリ(dir)を除外する方法

RedirectMatch permanent "^/((?!dir).*)$" http://news.example.com/$1

今回の.htaccessの位置や、サブディレクトリであることから、下記の書き方でないとリダイレクトができませんでした。

サブディレクトリの.htaccessにリダイレクト設定を書く人はサブディレクトリのパスも書かないといけないということですね!

RedirectMatch permanent "^/((?!news/wp).*)$" http://news.example.com/$1

(ちなみに)RewriteRuleでのwordpress管理画面を除外する方法

今回はサブディレクトリ「news」の中に「wp」というディレクトリを置き、その中にwordpressの中身を置いていたので、「wp」はリダイレクトさせないようにしました。

<IfModule mod_rewrite.c> 
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/wp/*.*$
RewriteRule ^(.*)$ https://news.example.com/$1
</IfModule>

(ちなみに)リダイレクト設定により管理画面へのログインURLは変わるかも

いままでは、https://example.com/news/wp-admin にアクセスすると、正しいログイン画面にリダイレクトしてくれていましたが、RedirectMatchで制御したせいか、管理画面に入れませんでした。

https://example.com/news/wp/wp-admin にアクセスすると正しくログイン画面が表示されました。

(ちなみに)プレビューもリダイレクトされるので、プレビューを使いたい時はこうする

投稿プレビューの URLを変更する

通常、記事のプレビューURLは下記のような形です。

https://example.com/news/?p=1266&preview=true&_thumbnail_id=1268

https://example.com/news は https://news.example.com にリダイレクトされるようになるので、?p= 以降を引き継ぎ、新しいサイトへとリダイレクトされてしまいます。

そこで、プレビューURL自体を変更する方法を取りますが、functions.phpに以下の記述を追加します。

function  replace_preview_post_link ( $url ) {
    $replace_url = str_replace('http://example.com/news', 'http://example.com/news/wp', $url);
    return $replace_url;
}
add_filter('preview_post_link', 'replace_preview_post_link');

(ちなみに)リダイレクト設定したら管理画面がキャッシュで乱れるかも

やっと管理画面に入れた!と思ったら、投稿記事の編集画面の表示が崩れていました。

一度、.htaccessのRedirectMatchの記述をコメントにして無効化し、表示がおかしい画面をリロードして、画面が正しく表示されたかを確認しました。

そして、.htaccessのRedirectMatchの記述をもとに戻し、再度画面をリロードするときちんと表示されました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です