直接WebサーバーのIPを打ってサイトに飛んで来るスケベな輩に対処する方法を書いて行きます。
今回は.htaccessでHTTPのリダイレクトの仕組みを利用して、IPアドレス直のアクセスを防ぎます。他にもDNSで変更する方法もありますが、今回はやりません。ちなみに、お名前.comは逆引きに対応していません。
INDEX
IPアドレスの正引きと逆引き
DNSで「hoge.com」を「***.***.***.***」にルーティングするように設定する場合を正引きと呼んで、この逆を逆引きと言います。恐らく大体のレンタルサーバーでは、逆引きされると、エラー画面が出るようになっていると思います。なってないと、Webサイトが表示されてしまう場合があります。
リダイレクトについて
HTTPの仕組みにクライアントがGETリクエストでサーバーに対して、「hoge.com」をリクエストした時に、リダイレクトレスポンスというのをサーバーが送ることでURL転送が実現します。
リダイレクトレスポンスのステータスコードでよくあるのが、301と302になり、転送先URLの書かれたLocationヘッダーを送ることで、クライアントが何処に行けば良いか分かるようになっています。
恒久的なリダイレクト
一時的な移動でなく元のURLは利用しない場合に使います。なので、検索エンジンは、転送先のURLでデータを更新します。
ステータスコード | 表示される状態 | 主な使用例 |
---|---|---|
301 | 恒久的に移動 | 転送先が正しいURLになる場合に利用する |
308 | 永続的なリダイレクト | 自分の能力だと利用用途が不明。 リダイレクト前と同じメソッドで リダイレクト先にアクセスできる |
一時的なリダイレクト
一時的にWebサイトが利用できない場合に利用します。検索エンジンは、転送先のURLでデータを更新しません。なので、IPアドレスのアクセスをリダイレクトする場合、私なら 恒久的なリダイレクトをします。
ステータスコード | 表示される状態 | 主な使用例 |
---|---|---|
302 | 見つかる | 期間指定をしてリダイレクト先を設定する場合 |
303 | その他を見る | ページの再読み込みの誤動作を防止する。 (put,postのあと) |
307 | 一時的なリダイレクト | サーバに障害が起きた場合に利用する。 リダイレクト前と同じメソッドで リダイレクト先にアクセスできる |
#302の期間指定の例
RewriteEngine On
RewriteCond %{TIME} <20201130000000
RewriteRule ^$ http://hoge.info/from/ [R=302,L]
RewriteRule ^$ http://hoge.info/to/ [R=302,L]
IP直打ちを.htaccessでリダイレ
.htaccessにはこのように書きました。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^***\.***\.***\.***$ [NC]
RewriteRule .* https://***.com%{REQUEST_URI} [R=301,L]
</IfModule>
IfModule mod_rewrite.c | mod_rewrite使う宣言 |
RewriteEngine | mod_rewriteを使うか使わないか |
RewriteBase | リライト処理のベースとなるURL |
RewriteCond [NC] | サーバー変数と一致してた場合に次の処理へ [NC]は、大文字小文字無視 |
RewriteRule [R=301,L] | 実際にURLを書き換える処理。 R=301は301でリダイレクト Lは、変更があった場合、もう一度最初処理されて、 適合しなければ振り分け終了となる。 強制的に終了したい場合はENDにする |
というわけで、IP直打ちしてアクセスしてくるすけべぇな輩に対応しましょう!