Redirectionプラグインでwp-loginのリダイレクトを除外する方法

シェアする

Redirectionプラグインを導入した

このサイトは早く記事を書きたかったため、wordpressの導入は一部初期設定のままで行いました。
すると、トップページのアドレスは http://ukigumo.s500.xrea.com/wordpress になるわけですね。

んで手っ取り早く作ったので、 http://ukigumo.s500.xrea.com にアクセスされた場合
「http://ukigumo.s500.xrea.com/wordpress にアクセスしてね!」
と書かれたhtmlを表示していました。

さすがにそんな不格好なのをずっと続ける気はなくw
いい加減リダイレクトの設定をしようと思い「Redirection」プラグインを導入しました。
スマホとか出先とかでも編集できるように、.htaccessではなくプラグインを…
というのはウソで、.htaccessをブラウザのファイルマネージャーから編集しようとすると上手くいかなかったからです;

初期設定でwordpressをインストールした場合に、一階層減らすようリダイレクトすると陥るエラー

さて、Redirectionを導入していざ設定したわけですが…
一般的な正規表現の例を書き換えただけでは、エラーが出ます!

■転送ルールの設定
Source URL: /wordpress/(.*)$
Match : URL only
Action : Redirect to URL “Regular expressionにチェック有り”
ターゲット URL: http://hogehoge/$1

これがよく見る設定方法ですね。
しかし、このままだとログイン画面にアクセスすることができなくなります。
/wordpress/wp-login.php
もこのルールで該当してしまい、リダイレクトのループが発生してしまうのです。

解決…と思いきや

■転送ルールの設定
Source URL: /wordpress/(?!wp-login)(.*)$
Match : URL only
Action : Redirect to URL “Regular expressionにチェック有り”
ターゲット URL: http://hogehoge/$2

説明しますと「否定的先読み」という条件でマッチングを行っているのです。
「wp-loginで始まらない文字列を転送する」と指定した訳です。

正規表現の記述を知っている人には簡単な話だと思いますが、ググって出てこなかったのでまとめた次第です。
「否定的先読み」でググると、他にも複雑なマッチング例が出てきますので、興味がある方はそういった専門的なサイトをご覧ください。
私は検索するのが早いだけで、専門ではありませんので;

ところがどっこい、これは上手く動きませんでした;
一晩上手く動いたと思ったのですが、クッキー残っていたのでしょうかね…

結局こうなった

各設定のURLは、必ずご自身のパーマネントリンクの設定をどうしているか確認して書き換えてくださいね。

トップページをリダイレクト

Source URL: /wordpress/
Match : URL only
Action : Redirect to URL “Regular expressionにチェックなし”
ターゲット URL: http://hogehoge/

トップページをリダイレクト(末尾スラッシュなし)

Source URL: /wordpress
Match : URL only
Action : Redirect to URL “Regular expressionにチェックなし”
ターゲット URL: http://hogehoge/

ページ送りのリダイレクト

Source URL: http://ukigumo.s500.xrea.com/page/(.*)$
Match : URL only
Action : Redirect to URL “Regular expressionにチェック有り”
ターゲット URL: http://hogehoge/page/$1

個別の記事をリダイレクト

Source URL: /wordpress/date/(.*)$
Match : URL only
Action : Redirect to URL “Regular expressionにチェック有り”
ターゲット URL: http://hogehoge/date/$1

カテゴリー表示をリダイレクト

Source URL: /wordpress/category/(.*)$
Match : URL only
Action : Redirect to URL “Regular expressionにチェック有り”
ターゲット URL: http://hogehoge/category/$1

アーカイブ表示をリダイレクト

Source URL: /wordpress/([0-9]{4})/(.*)$
Match : URL only
Action : Redirect to URL “Regular expressionにチェック有り”
ターゲット URL: http://hogehoge/$1/$2

補足

Source URL: /wordpress/([0-9]{4})/(.*)$
ここに()で区切られた部分が2箇所出てきます。
これは出てきた順に$1、$2として代入されます。

$1=([0-9]{4}) これは西暦の部分なので、整数4桁を意味しています。
$2=(.*) これは西暦のあとのスラッシュ以降の全ての文字列を意味しています。

従って、こうなるわけです。
ターゲット URL: http://hogehoge/$1/$2

サイトマップをリダイレクト

Source URL: /wordpress/sitemap(.*)$
Match : URL only
Action : Redirect to URL “Regular expressionにチェック有り”
ターゲット URL: http://hogehoge/sitemap$1