前回の記事では、.htaccessでのURL正規化(301リダイレクトなど)について紹介しましたが、今回は特定のフォルダやファイルへのアクセスを制限(拒否または許可)する設定の書き方についてまとめました。
この手のアクセス制限でよく使うのがBasic(ベーシック)認証です。WordPressのブログであっても、リリース前のまだ公開したくない段階でベーシック認証をかけたり、あるいはwp-login.phpのログインページに認証をかけることもあります。
今回もそのようなよく使うアクセス制限を例に、具体的な.htaccessの書き方をいくつか紹介しようと思います★
目次
ベーシック認証を設定する方法
頻繁に使う機会がありそうなベーシック認証からご紹介します。
まず、ベーシック認証をするためには以下の2つのファイルが必要です。
- .htaccess
- .htpasswd
.htaccessは、いま話をしているファイルのことですが、.htpasswdって何?って人もいるかもなので、ざっくりですが解説しておきます。
で、そんなベーシック認証用の.htaccessと.htpasswdを作成するのに超便利なサービスが「htaccesseditor」です。
ここは、ベーシック認証に必要なIDとパスワード、あとは.htpasswdの設置場所を入力するだけで、.htaccessと.htpasswd(パスワードは暗号化済み)のファイルをサクっと生成してくれます。
ベーシック認証を設定するための.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 |
この指定された場所に.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> |
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> |
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> |
・・・
ここまでがBasic認証の具体的な書き方の説明ですが、まだまだ色んなケースがあります。今後、必要に応じて記述例を追加していきたいと思います★
特定のIPアドレスからのアクセスを制限(拒否/許可)する
ここからはベーシック認証ではなく、特定のIPアドレスからのアクセスを許可したりブロックする制限の方法についてまとめていきます。
アクセス拒否
まずは、特定のIPアドレスやドメインからのアクセスを拒否したいときの、.htaccessの書き方例です。
.htaccessの書き方 |
order allow,deny allow from all deny from 192.168.1.1 |
---|
allowとかdenyとかallとか、呪文のような言葉がいろいろ出てきましたが、上記処理が何をしているのか?を簡単に解説すると、
- order allow,deny:最初に「許可(allow)」して次に「拒否(deny)」するよ!という順番を指定
- allow from all:で、「すべてのアクセス(from all)を許可(allow)」することを宣言し…
- deny from:「だが、お前たち(192.168.1.1、sample.com)のアクセスは断る!」
といった感じです。
アクセス許可
続いて、特定のアドレスなどからのアクセスを許可するときの、.htaccessの記述例を紹介します。
.htaccessの書き方 |
order deny,allow deny from all allow from 192.168.1.1 |
---|
アクセス拒否のときと似ていますが、allowとdenyの順番を入が入れ替わっています。
ここでは、まず先にすべてのアクセスを拒否(deny)しておいてから、192.168.1.1やsample.comといった特定のアドレスからのアクセスを許可(allow)するといった処理をやっています。
WordPressのログインURLに対して特定のIPのみアクセスを許可する
このアクセス許可の方法をベースにつくられた、WordPressのログインURLにアクセス制限をかけるための.htaccessファイルが、以下のサイトで公開されています。
この.htaccessファイルは何をしているかというと、wp-login.phpに対して一旦、すべてのアクセスを拒否っておいてから、国内すべてのIPアドレスのアクセスを許可しています。
理論上、海外からのアクセスを遮断できるので、ブルートフォースアタックに対して有効な手段とされています。
<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管理画面に対して国外からのアクセスを拒否できるような機能を提供するところが増えてきていますね。
これはエックスサーバーの「ダッシュボードアクセス制限」の画面ですが、サーバーでこの手の制限機能が使えるのであれば、ぜひ使っておいた方がいいですね。サーバーからやると設定も楽ですし。
特定の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 |
・・・
このように、ベーシック認証以外にも、いろんな用途でアクセス制限を使うことがあります。ほかにも使いそうな処理が出てきたら、随時追加していきたいと思います★
最後まで読んでいただき、ありがとうございました。
パスワードは暗号化して記述する必要があるのですが、以下で紹介するhtaccesseditorのようなサービスを利用すると簡単に作成することができます。
最終的には.htaccessと一緒にサーバーにアップロードして使います。(アップロード場所は.htaccessファイル内で指定するので、必ずしも.htaccessと.htpasswdが同じ階層にあるとは限りません)