プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
.htaccessを使って、特定IPアドレスからのアクセスをリダイレクトする
結論から書くと、例えば

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^192\.0\.2\.74$
RewriteRule .* http://www.example.com/ [R=302,L]

のように

RewriteEngine on
RewriteCond %{REMOTE_ADDR} 【対象のIPアドレス】
RewriteRule 【対象のディレクトリ】 【転送先のURL】 [R=302,L]

の形式で書けばOKです。

それでは詳細を書いていきます。

「明らかにボットだろ」って頻度で、うちのサイトにアクセスしてくる方がいらっしゃったのですよ。
1秒に1回とかそんなレベルでした。これは人間の限界を超えているね、うん。

最初は

deny from 192.0.2.74
ErrorDocument 403 err.html

のように設定して、アクセスを拒否していたのですが、error_logに

[Tue May 13 21:51:43 2014][error] [client 192.0.2.74] client denied by server configuration: /hoge/index.html

のようなログがガンガン吐き出されてですね。
これが鬱陶しかったのです。

そこで私は考えました。

よし、どっかの面白サイトにでも飛ばしてやろう(--)

……いや、ダメダメ。もう大人なんだから。

取りあえず「example.com」に飛ばしてあげることにしました。

ほんで、具体的にはどーやるの(--?

ふむふむ(--)

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^192\.0\.2\.74$
RewriteRule .* http://www.example.com/ [R=302,L]

でOKでした。

RewriteCond %{REMOTE_ADDR} ^192\.0\.2\.74$

の「^192\.0\.2\.74$」は対象のIPアドレスね。
正規表現指定なので「^(~で始まる)」「\.(『.』として扱う)」「$(~で終わる)」を付けています。

まぁ、ぶっちゃけ

RewriteCond %{REMOTE_ADDR} ^192.0.2.74$

って書いても動きますし

RewriteCond %{REMOTE_ADDR} 192.0.2.74

って書いても、パッと見は動きますけどね。

「^192.0.2.74$」は

【で始まる】192【任意の一文字】0【任意の一文字】2【任意の一文字】74【で終わる】

指定です。

条件だけ見れば、例えば

192A0.2.74

も「^192.0.2.74$」の指定にマッチしますよ。

IPアドレスの特性上ありえないので、気にしなくて良いですけどね。
「^192.0.2.74$」を指定すれば「^192\.0\.2\.74$」を指定したときと、同じ結果になります。

ここまではあまり気にしなくて良いところです。
次はちょっと大事(--)b

正規表現の目印を何もつけないで「192.0.2.74」と指定する際はご注意ください。
「192.0.2.74」だと問題ありませんが、例えば

RewriteCond %{REMOTE_ADDR} 192.0.2.1

と指定した場合、条件にマッチするのは「192.0.2.1」だけではありません。

192.0.2.10
192.0.2.11
192.0.2.12
  ・
  ・
192.0.2.19
192.0.2.100
192.0.2.101
192.0.2.102
  ・
  ・
192.0.2.199

までのIPアドレスがマッチしちゃいます。
思わぬIPアドレスまで対象になっちゃうのでご注意くださいね。

これが

RewriteCond %{REMOTE_ADDR} ^192\.0\.2\.74$

の部分に関する説明です。
長くなってごめんなさい。

次に

RewriteRule .* http://www.example.com/ [R=302,L]

の部分ですが「.*」は対象のディレクトリです。
「.(任意の1文字)」「*(任意の0文字以上)」なので
「何か書いてあれば」つまり「全部」な指定になっています。
特定のディレクトリだけ拒否りたい場合はここでディレクトリを指定してください。

ただし、ここも正規表現指定です。

例えば

/test

と指定してしまうと、

/test/
/test/index.html
/test.html
/test2.html
/hoge/test2/index.html

などが対象になってしまいます。
「^(~で始まる)」「$(~で終わる)」を忘れないでくださいね。

「http://www.example.com/」の部分はリダイレクト先のURLだから良いとして、
あと気になるとしたら

[R=302,L]

の部分ですかね。

「R=302」は「302リダイレクトですよー」の意味です。
301リダイレクトにしたい場合は「R=301」と書きます。

301リダイレクトと302リダイレクトの違いについては
301リダイレクトと302リダイレクトの違い。」の記事をご覧ください。

[L]は「ここが最後の行ですよ~」の目印です。
この行以降に書いたRewriteRuleは無視されます。

そんなところです。

最後にもう一度まとめておきますね。

.htaccessを使って、特定IPアドレスからのアクセスをリダイレクトさせた場合は

RewriteEngine on
(リライトすんぞ!の宣言)
RewriteCond %{REMOTE_ADDR} ^192\.0\.2\.74$
(IPアドレスが192.0.2.74だったらリライトすんぞ!)
RewriteRule .* http://www.example.com/ [R=302,L]
(全部http://www.example.com/に302リダイレクトすんぞ!)

と書けばOKです。

完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● 環境設定関連 

  関連記事