BLOGスタッフブログ

インソースマーケティングデザイン

2018.02.05 コーディング

htaccessで特定IPの、特定パスへのアクセスを制限する方法

マリンロードスタッフブログをご覧いただいている皆様、こんにちは。
フロントエンドエンジニアの虎澤です。

インフルエンザが猛威を振るってきましたね。
学校や保育園でも流行り出したそうで、子供達を含め私も毎日マスクをして予防しています。
マスクだけじゃ予防しきれないですが、リスクは少しでも減らしたい…。
何事も身体が資本。
健康管理には気をつけていきたいものです。

htaccessで特定IPの、特定パスへのアクセスをブロックする書き方

さて、回りくどい書き方はやめにして先ず結論から書きましょう。
特定IPの、特定パスへのアクセスを拒否するには、htaccessに以下のように書きます。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*/aaa [OR]
RewriteCond %{REQUEST_URI} ^.*/bbb [OR]
RewriteCond %{REQUEST_URI} ^.*/ccc
RewriteCond %{REMOTE_ADDR} 000.111.222.333
RewriteRule ^(.*)$ – [F,L]
</IfModule>

上記を人の言葉に翻訳すると、

「特定のIP(000.111.222.333)が特定のパス(aaaかbbbかcccが含まれるパス)にアクセスしてきたら、拒否します!」

となります。

アクセス制限は、もっと根本の部分(apacheの設定)などでも設定できます。
ですがその場合、サーバーの設定自体をいじることになるため、万が一ミスした時にサイトが見れなくなってしまうなど、大きなリスクが伴います。
なので、htaccessを使ってアクセス制限をかけるのが得策だと考えます。

「リダイレクト」なんて言葉はweb業界にいればよく耳にすると思いますが、これも上記同様、apacheのmod_rewriteというモジュールを利用しています。
そもそも利用しているサーバーでmod_rewriteが有効になっていない場合、リダイレクトやアクセス制限などかけられないのでご注意ください。
(参考サイト:Apacheのmod_rewriteモジュールの使い方を徹底的に解説

条件分岐、ORとAND

ちなみに、

RewriteCond %{REQUEST_URI} ^.*/aaa
RewriteCond %{REQUEST_URI} ^.*/bbb

の部分、[OR]を取り除いていますが、こう書くと「且つ」の意味となり、

「特定のIP(000.111.222.333)が特定のパス(aaa且つbbb且つcccが含まれるパス)にアクセスしてきたら、拒否します!」

となります。
ここで言うパスとは、ディレクトリ名単位でも書けるので、例えば

http://www.marine.com/aaa/bbb/ccc

というURLが存在する場合、上記の条件に当てはまることになります。

http://www.marine.com/aaa/hoge/ccc/bbb

でも、aaaもbbbもcccもURLに含まれているため、条件に当てはまりますね。

これら条件は、正規表現でかかれてあるのですが、これを理解するのに私はとても苦労しました…(現在も苦戦中)
こちらのサイトがとてもわかりやすいので、よろしければ参考にしてみてください。

mod_rewriteのオプション

mod_rewriteのオプションには、[OR]の他に[NC]というものもあります。
判定の際、大文字と小文字の区別をしないようにするオプションです。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*/Aaa [OR,NC]
RewriteCond %{REQUEST_URI} ^.*/BBB [OR]
RewriteCond %{REQUEST_URI} ^.*/ccC [NC]
RewriteCond %{REMOTE_ADDR} 000.111.222.333
RewriteRule ^(.*)$ – [F,L]
</IfModule>

と書いた場合、

「特定のIP(000.111.222.333)が特定のパス(aaa(大文字小文字どちらでもOK)かBBBかccc(大文字小文字どちらでもOK)が含まれるパス)にアクセスしてきたら、拒否します!」

となり、
http://www.marine.com/AAA/
でも、
http://www.marine.com/aaa/
でも、
http://www.marine.com/aaA/
でも条件に合致します。

NCが設定されていないパスについては、
http://www.marine.com/bbb/

http://www.marine.com/BBb/
などは条件に合致しません。

まとめ

今回説明したのはほんの一部で、RewriteEngine Onって何?とか、%{REQUEST_URI}って何?とか、
掘り下げるともっと色々と知らなければいけないことがあります。
とりあえず今回は、「特定IPの、特定パスへのアクセスをブロックする書き方」についてスポットライトを当ててみました。
htaccessでアクセス制限をかける機会がありましたら、よろしければ参考にしてみてください。

以上、虎澤でした。

インソースマーケティングデザインが書いた他の記事

見積もり・ご依頼など、
お気軽にご相談ください

本サイトはユーザーエクスペリエンスの向上などを目的に、Cookieを使用しています。
右記のバナーで「同意する」をクリックする、または本サイトを利用することにより、
お客様は弊社のCookieポリシーに同意したことになります。

同意します