mod_rewriteでWordPressの管理画面だけアクセスを許可する設定

公開日: 2015/04/06
カテゴリー: WordPress
  • このエントリーをはてなブックマークに追加

WordPressの管理画面に特定のIPアドレスだけログインできるようにする、というのはセキュリティ向上のためによく行われます。

mod_rewrite

ところが今回、クライアントからWebサイト自体はクローズドするので301リダイレクトしたいけど、WordPressの管理画面はコンテンツ移行の関係でログインをしたい、といった要望がありました。

ただ単にリダイレクトを行うだけならいくつか方法がありますが、特定URLのみアクセスを許可してそれ以外のアクセスはリダイレクト、という情報がパッと出てこなかったのでメモ。

リダイレクトとは

リダイレクトとは、Webサイトの移設やドメインの変更、ページのURLを変更する場合に変更前のURLから変更後のURLへ、ユーザーや検索エンジンを誘導(転送)するための仕組みになります。

特に301リダイレクトは、コンテンツのアドレス変更として動作するもので、正しく設定した301リダイレクトでは元のリンク評価のうち85〜90%が引き継がれるとGoogleのMatt Cutts(マット・カッツ)氏は言っています。

海外SEO情報ブログ:301リダイレクトで何%のPageRankが失われるのか? => リンクを通したときと同じ

301リダイレクトによって消えるPageRankはリンクを通じて消えるPageRankと現在はほぼ同じだ。

このため、ドメインの移行やWebサイトの統合などには、この301リダイレクトが使われます。

リダイレクトの設定方法

リダイレクトの設定にあたってはいくつか方法がありますが、今回はmod_rewriteを使った.htaccessによる設定に絞ってお話をします。

mod_rewriteとはApacheのモジュールのひとつで、このモジュールを使用する事によってアクセスしてきたURLを書き換える事が出来ます。

Webサイト全体を.htaccessで301リダイレクトさせる場合

Webサイト内の全てのページを、変更したWebサイトの各同一URLへリダイレクトさせる場合は以下のように記述します。

これは、http://www.moto.jpからhttp://www.henko.jpに301リダイレクトを行っていますが、詳細に見てみましょう。

mod_rewriteが利用できない環境ではエラーが発生してしまうので、まずはmod_rewriteが利用できるかどうかを確認し、もし利用できない場合には、<IfModule mod_rewrite.c>から</IfModule>間が一切適用されなくなります。

これは、mod_rewriteの機能をONにするという記述になります。

これは、RewriteRuleを実行するための記述で、「RewriteCond %変数名 条件」の順番となっています。

ここに記述した条件が満たされた時だけ、RewriteRuleに書いたURLの書き換えと転送が実行されるようになります。

上記の場合だと、「HTTP_HOST」という変数名が使われていますので、閲覧しているWebサイトのドメインが「www.moto.jp」の時が条件となります。

これは、RewriteCondeでの条件が満たされた時に、URLの書き換えと転送を行う部分です。

RewriteRuleの後にある「^」は行の先頭を表し、「()」で囲まれた部分は後ろにある「$1」の部分に代入され、「.*」はあらゆる文字、「$」は行の末尾を表します。

つまり、「http://www.moto.jp/sample/」というURLにリクエストがあった場合、「^(.*)$」はこの「/sample/」という部分を示し、これは「$1」となります。

後半の「http://www.henko.jp/」は変更後のドメイン、「$1」上記の場合は「/sample/」になります。

その後ろにある「[R=301,L]」の「R=301」は、301リダイレクトを示し、「L」はRewriteによる書き換えと転送をこれで打ち切りにする、という事を示しています。

これにより、「http://www.moto.jp/sample/」というURLにアクセスがあったものが「http://www.henko.jp/sample/」にリダイレクトされます。

WordPressの管理画面以外を.htaccessで301リダイレクトさせる場合

WordPressの管理画面以外を.htaccessで301リダイレクトさせる場合は以下のようになります。

これは、「HTTP_REFERER」で前ページが「http://www.moto.jp/wp-admin/」のディレクトリ以下でない場合のアクセスと、「REQUEST_URI」で「wp-login.php」「/wp-admin/」以外のアクセスは、http://www.henko.jp/にリダイレクトをさせています。

これにより、管理画面にだけはログインできるようになり、プレビューなどは使えませんが、投稿や固定ページ等、/wp-admin/以下のディレクトリに入っているものは閲覧ができます。

タグ: , ,