会社で管理している、とあるお客さんのホームページ(サイト)の偽物らしきページが某国のトップドメインを持つサイトに上がってるらしいからそこからのアクセスを拒否したい、という依頼があったらしい。
よくよく聞いたら、どうやら、その某国の問題サイトにアクセスがある度に、お客さんのサイトへアクセスしてきて内容を取得して携帯電話で見られるように形にして表示させているらしい。
まぁ、どうやらグーグルにもあるサービスを模した感じかな?普通ならそんなの無視しておけばいいんだが、お客さんのサイトは信用第一で万が一間違いがあってはなならないような固い業態なので放っておけないらしい。
まぁ、サイトのドキュメントルートに 下記ような感じの .htaccess ファイルを置けば、問題無い。
Order Allow,Deny Allow from all Deny from 拒否するリモートIPアドレスもしくはリモートホストのドメイン
が!、しかし! 話はここで終わらなかった!
なんと、そのお客さんのサイトのサーバー(正確には共用サーバー)は、limit を上書きできないんだ!
要するに上記の設定を .htaccess に記述してしまうと、500 Internal Server Error を吐いてしまうんだ!
ああ、なんという、クソさ加減。
そして、その時点で、僕にヘルプを求めてきたw
はじめは、そんなクソサーバーを使っている時点で、手の打ちようがねーよ的に返したわけだが・・・
・・・が、しかし、少しでもウェブに関わる仕事をしている者として、プロフェッショナルとして、それではダメだ。
(少々大袈裟です(^_^;;;)
何か代替案を・・・・というわけで、サーバーの仕様書を調べてみると、mod_rewrite の設定は可能のようだ。
っちゅーわけで、Rewriteモジュールを使用して、「特定のリモートIPアドレスにマッチしたらURLを書き換えてしまえ作戦」を発動することを提案。
まぁ、以下代替案。
RewriteEngine On RewriteCond %{REMOTE_ADDR} ^000\.111.\222\.333$ RewriteRule ^(.*)$ /forbidden/ [R=403,L] # ちなみに、/forbidden/ は実在しないディレクトリを指定した。
R=403 のところは本来は ステータスコード、301とか302とかにしなければならないんだけど・・・試しに403(アクセス禁止)にしてみたら、アクセス禁止ページを表示してくれた。これってHTTP的にイケないこと?違反なのかな??? まぁ・・・いいや。どうせオイラに責任はないんだしー。
Apacheに精通している人なら、もっとスマートな解決方法をお持ちだと思うんですが、それにしても大手のレンタルサーバーが提供する機能があまりにも貧弱すぎて、まぁ、もろもろ理由があると思うので、しょうが無いんですが・・・。
っていうか、会社にはWebサーバー管理・構築(主にApacheね)に精通する人が一人もいないので、素人に毛の生えたような僕でも適当にやっていけるんだなー(^^;;;
【追記 2013/4/15】
リダイレクトさせるのではなく、アクセスを制限するには、下記のようにするべきでした。
【追記 2015/09/07】
間違い修正
RewriteEngine On RewriteCond %{REMOTE_ADDR} ^000\.111.\222\.333$ RewriteRule ^(.*)$ - [F,L] #すべてのアクセスを403(アクセス禁止)に。