.htaccessでのアクセス制限の書き方まとめ(WordPress管理画面のBasic認証/ホスト/IP制限)

前回の記事では、.htaccessでのURL正規化(301リダイレクトなど)について紹介しましたが、今回は特定のフォルダやファイルへのアクセスを制限(拒否または許可)する設定の書き方についてまとめました。

この手のアクセス制限でよく使うのがBasic(ベーシック)認証です。WordPressのブログであっても、リリース前のまだ公開したくない段階でベーシック認証をかけたり、あるいはwp-login.phpのログインページに認証をかけることもあります。

今回もそのようなよく使うアクセス制限を例に、具体的な.htaccessの書き方をいくつか紹介しようと思います★

ベーシック認証を設定する方法

頻繁に使う機会がありそうなベーシック認証からご紹介します。

まず、ベーシック認証をするためには以下の2つのファイルが必要です。

ベーシック認証をするために必要なファイル
  • .htaccess
  • .htpasswd

.htaccessは、いま話をしているファイルのことですが、.htpasswdって何?って人もいるかもなので、ざっくりですが解説しておきます。

.htpasswdとは、ベーシック認証で使うIDとパスワードを書いたファイルです。

パスワードは暗号化して記述する必要があるのですが、以下で紹介するhtaccesseditorのようなサービスを利用すると簡単に作成することができます。

最終的には.htaccessと一緒にサーバーにアップロードして使います。(アップロード場所は.htaccessファイル内で指定するので、必ずしも.htaccessと.htpasswdが同じ階層にあるとは限りません)

で、そんなベーシック認証用の.htaccessと.htpasswdを作成するのに超便利なサービスが「htaccesseditor」です。

ここは、ベーシック認証に必要なIDとパスワード、あとは.htpasswdの設置場所を入力するだけで、.htaccessと.htpasswd(パスワードは暗号化済み)のファイルをサクっと生成してくれます。

ベーシック認証を設定するための.htaccessの書き方

ここから、具体的なベーシック認証の設定方法を解説していきます。

と言っても、ブログのどこに認証をかけるかによって、.htaccessの書き方が変わってきますので、

htaccessでベーシック認証を設定する例
  • ブログ全体でベーシック認証
  • 特定のディレクトリに対してベーシック認証
  • 特定のファイルへのアクセスに対してベーシック認証
  • WordPressの管理画面にベーシック認証

まずはよく使いそうな上の4例に絞って、個別に記述方法を見ていくことにします。

ブログ全体でベーシック認証

まずはブログ全体をベーシック認証で保護する場合です。

WordPressの立ち上げをしたばかりで、まだ誰にもブログを見せたくないという場合や、特定の人間しかアクセスできないようなクローズドなサイトを作る際によく利用されます。

制限対象URL http://sample.com/
.htaccessの設置場所 http://sample.com/
.htpasswdの設置場所 http://sample.com/
.htaccessの書き方 AuthUserFile /フルパス/.htpasswd
AuthGroupFile /dev/null
AuthName “Please enter your ID and password”
AuthType Basic
require valid-user
AuthUserFileで.htpasswdの設置場所を指定します。

この指定された場所に.htpasswdファイルがアップされていなかったり、ファイルは上がっているけど指定場所の記述をミスってたりすると、認証は正常に機能しません。

特定のディレクトリに対してベーシック認証

続いて、特定のディレクトリ(フォルダ)に対してベーシック認証をかける方法です。

特定のディレクトリということなので、例えばdir/というフォルダに認証をかけたいのであれば、dir/内に.htpasswdファイルをアップしておきます。

制限対象URL http://sample.com/dir/
.htaccessの設置場所 http://sample.com/
.htpasswdの設置場所 http://sample.com/dir/
.htaccessの書き方 AuthUserFile /フルパス/dir/.htpasswd
AuthGroupFile /dev/null
AuthName “Please enter your ID and password”
AuthType Basic
require valid-user

特定のファイルへのアクセスに対してベーシック認証

特定のファイルへのアクセスに対して認証をかける方法です。

制限対象URL http://sample.com/dir/member.html
.htaccessの設置場所 http://sample.com/
.htpasswdの設置場所 http://sample.com/dir/
.htaccessの書き方 <Files member.html>
AuthUserFile /フルパス/dir/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
AuthName “Please enter your ID and password”
require valid-user
</Files>
先の特定のディレクトリの時と違い、<Files member.html></Files>のように対象のファイル名を指定します。

WordPressのログインページにベーシック認証

上記の特定ファイルへのアクセス制限例を元に、WordPressのログインページであるwp-login.phpにベーシック認証を設定する方法をまとめます。

制限対象URL http://sample.com/wp-login.php
.htaccessの設置場所 http://sample.com/
.htpasswdの設置場所 http://sample.com/
.htaccessの書き方 <Files wp-login.php>
AuthUserFile /フルパス/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
AuthName “Please enter your ID and password”
require valid-user
</Files>
<Files wp-login.php></Files>でログインページのURLに制限をかけます。

WordPressの管理画面全体にベーシック認証

管理画面全体に対してベーシック認証をかける場合は、wp-admin/フォルダに以下の記述を書いた.htaccessファイルをアップしておきます。

制限対象URL http://sample.com/wp-admin/
.htaccessの設置場所 http://sample.com/wp-admin/
.htpasswdの設置場所 http://sample.com/
.htaccessの書き方 AuthUserFile /フルパス/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
AuthName “Please enter your ID and password”
require valid-user
<FilesMatch “(admin-ajax.php)$”>
Satisfy any
order allow,deny
allow from all
deny from none
</Files>
管理画面全体に対してべーシック認証をかけるときの注意点ですが、wp-admin/admin-ajax.phpの認証を除外しておかないと、管理画面以外のページを見ている時でも、認証IDとパスワードを聞かれる可能性があるということです。

・・・

ここまでがBasic認証の具体的な書き方の説明ですが、まだまだ色んなケースがあります。今後、必要に応じて記述例を追加していきたいと思います★

特定のIPアドレスからのアクセスを制限(拒否/許可)する

ここからはベーシック認証ではなく、特定のIPアドレスからのアクセスを許可したりブロックする制限の方法についてまとめていきます。

アクセス拒否

まずは、特定のIPアドレスやドメインからのアクセスを拒否したいときの、.htaccessの書き方例です。

.htaccessの書き方 order allow,deny
allow from all

deny from 192.168.1.1
deny from .sample.com

allowとかdenyとかallとか、呪文のような言葉がいろいろ出てきましたが、上記処理が何をしているのか?を簡単に解説すると、

アクセス拒否の処理の解説
  1. order allow,deny:最初に「許可(allow)」して次に「拒否(deny)」するよ!という順番を指定
  2. allow from all:で、「すべてのアクセス(from all)を許可(allow)」することを宣言し…
  3. deny from:「だが、お前たち(192.168.1.1、sample.com)のアクセスは断る!」

といった感じです。

allow,denyの順番を間違えたりすると、思ったような動きをしてくれないので、この辺は注意して指定するようにしてください。

アクセス許可

続いて、特定のアドレスなどからのアクセスを許可するときの、.htaccessの記述例を紹介します。

.htaccessの書き方 order deny,allow
deny from all

allow from 192.168.1.1
allow from .sample.com

アクセス拒否のときと似ていますが、allowとdenyの順番を入が入れ替わっています。

ここでは、まず先にすべてのアクセスを拒否(deny)しておいてから、192.168.1.1やsample.comといった特定のアドレスからのアクセスを許可(allow)するといった処理をやっています。

WordPressのログインURLに対して特定のIPのみアクセスを許可する

このアクセス許可の方法をベースにつくられた、WordPressのログインURLにアクセス制限をかけるための.htaccessファイルが、以下のサイトで公開されています。

この.htaccessファイルは何をしているかというと、wp-login.phpに対して一旦、すべてのアクセスを拒否っておいてから、国内すべてのIPアドレスのアクセスを許可しています。

理論上、海外からのアクセスを遮断できるので、ブルートフォースアタックに対して有効な手段とされています。

以下のようなallow from…の記述が、合計4,000行にも及ぶ、むちゃくちゃ長い.htaccessです。

<Files wp-login.php>
order deny,allow
deny from all

allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
allow from 1.5.0.0/16
allow from 1.21.0.0/16
・・・
</Files>

WordPressインストール後に、サーバーの自動で生成される.htaccessに、上記のアクセス許可の設定をコピペで追加してもOKです。

なお、最近ではレンタルサーバーの中にも、WordPress管理画面に対して国外からのアクセスを拒否できるような機能を提供するところが増えてきていますね。
.htaccessでのアクセス制限の書き方まとめ(WordPress管理画面のベーシック認証など)

これはエックスサーバーの「ダッシュボードアクセス制限」の画面ですが、サーバーでこの手の制限機能が使えるのであれば、ぜひ使っておいた方がいいですね。サーバーからやると設定も楽ですし。

特定のURLを経由したアクセスのみ受け入れる

少しややこしいですが、こういった処理は企業サイトなんかで稀に使われます。

例えば、サイト内のエントリーフォームぺージは採用ぺージを経由したときだけ表示(アクセスを許可)する、といった制限です。

採用ページURL http://sample.com/recruit/
.htaccessの設置場所
(フォームページURL)
http://sample.com/entryform/
.htaccessの書き方 SetEnvIf REFERER “saple.com/recruit” ref_ok
order deny,allow
deny from all
allow from env=ref_ok
この場合、.htaccessは、エントリーフォームのあるディレクトリ(entryform/)にアップロードするようにします。

・・・

このように、ベーシック認証以外にも、いろんな用途でアクセス制限を使うことがあります。ほかにも使いそうな処理が出てきたら、随時追加していきたいと思います★

最後まで読んでいただき、ありがとうございました。

ブログを始めるならWordPressテーマSTORKがオススメ

理由は以下の記事でまとめています。

【STORK】有料テーマ購入を迷う人にストークをオススメする7つの理由2021年版

2019年6月1日

綺麗なデザインが最初から用意されているので、「ブログを書きたい」と思った時からすぐに始めることができます。しかも、執筆に便利なツールも一通りそろっているので、「書くことだけ」に集中できるという、ブロガーにとってはとても魅力的なテーマです。

是非STORKを試してみてくださいね★

関連記事

コメントを残す

ABOUTこの記事をかいた人

STORKのテーマやプラグインなど、WordPressを使ったアフィリエイトに関する記事を中心に紹介しています。そのほかにもMacやiPhone、HTML、CSS、Javascript、PHPなどの記事もちょこちょこ書いています★