.htaccess - アクセス制限

特定のアクセスに対し、相手のサーバー変数を取得して、アクセス制限を掛けます。
アクセス制限は、サーバに思わぬ負荷をかけることがあります。不必要なアクセス制限は、できるだけ掛けないようにしてください。

*注 十分にアクセス情報を解析してから設定してください。設定によっては、正当な訪問者もアクセスできなくなる可能性があります。

サーバー変数

変数名 説明
HTTP_USER_AGENT ブラウザの種類とバージョン。
HTTP_REFERER 参照元の URL 。
HTTP_COOKIE 設定されているクッキー情報。
HTTP_FORWARDED プロキシサーバ情報。
HTTP_HOST 接続要求しているホスト名。
HTTP_PROXY_CONNECTION 接続先プロキシサーバとの接続状態。
HTTP_ACCEPT ブラウザが認識可能なデータ形式。
DOCUMENT_ROOT サイトのルートディレクトリ。
SERVER_ADMIN サーバ管理者のメールアドレス情報。
SERVER_NAME サーバのホスト名、ドメイン名、またはIPアドレス情報。
SERVER_ADDR サーバのIPアドレス。
SERVER_PORT 送信に使われたサーバのポート番号。
SERVER_PROTOCOL 送信に使われたプロトコルの名前とレビジョン情報。
SERVER_SOFTWARE 起動したサーバソフトウエアの名前とバージョン情報。
REMOTE_ADDR リモートホストのIPアドレス情報。
REMOTE_HOST リモートホストのドメイン名。
REMOTE_USER ユーザの認証名。
REMOTE_IDENT リモートホストのユーザ名。
REQUEST_METHOD リクエストを送信した方法。
REQUEST_URI リクエストされたURI。
SCRIPT_FILENAME 現在実行しているスクリプト名。
PATH_INFO クライアントから送られるパス情報。
QUERY_STRING URL に付加して渡された "?" 以降の文字列。
AUTH_TYPE ユーザを認証するときに使用する認証方法。
TIME_YEAR サーバのシステム日付・年
TIME_MON サーバのシステム日付・月
TIME_DAY サーバのシステム日付・日
TIME_HOUR サーバのシステム日付・時
TIME_MIN サーバのシステム日付・分
TIME_SEC サーバのシステム日付・秒
TIME_WDAY サーバのシステム日付・曜日
TIME サーバのシステム日付・Unix タイムスタンプ。

一般的な書式

RewriteEngine on
RewriteBase /

# "example.com" からのアクセスを全て禁止する
RewriteCond %{REMOTE_HOST} ^example.com$ [NC]
RewriteRule ^.* - [F,L]

RewriteEngine off

*注 サーバーによっては、"RewriteEngine off" を記述すると動作が不安定になる事があります。その場合は、記述しなくても問題はありません。

アクセス制限の記述例

◇特定のホストからのアクセスを全て禁止する
RewriteCond %{REMOTE_HOST} ^example.com$ [NC]
RewriteRule ^.* - [F,L]

【解説】[F] は「Forbidden(アクセス禁止)」を意味し、[L] は「Last(処理が適用されたら終了)」を意味します。 パターン内では、特殊文字の前に逆スラッシュ(日本語環境では "\")を付加する事に注意してください。

RewriteCond %{REMOTE_HOST} ^example.com$ [NC, OR]
RewriteCond %{REMOTE_ADDR} ^192.168.1.
RewriteRule ^.* - [F,L]

【解説】"REMOTE_HOST" を取得できない可能性が有るときは、"REMOTE_ADDR" を併記してアクセス制限をかけます。

◇特定の Referer からのアクセスを全て禁止する
RewriteCond %{HTTP_REFERER} ^http://www.example.com/bad.html$ [NC]
RewriteRule ^.* - [F,L]
◇特定の Referer 以外からのアクセスを全て禁止する(=特定の Referer からのみアクセスを全て許可する)
RewriteCond %{HTTP_REFERER} !^http://www.example.com/good.html$ [NC]
RewriteRule ^.* - [F,L]
◇直リンクを全て禁止する
RewriteCond %{HTTP_REFERER} !mydomain.com [NC]
RewriteRule ^.* - [F,L]

【解説】Referer が "mydomain.com" を含まないリクエストに対して、全ての直リンクを禁止します。

◇画像の直リンクを禁止する
RewriteCond %{HTTP_REFERER} !mydomain.com [NC]
RewriteRule \.(jpg|png|gif)$ - [F,L]

【解説】Referer が "mydomain.com" を含まないリクエストに対して、拡張子が ".jpg" または ".png" または ".gif" への直リンクを禁止します。

◇特定のブラウザからのアクセスを全て禁止する
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4.0 (compatible; MSIE 6.0)$ [NC]
RewriteRule ^.* - [F,L]
◇特定のホストの特定のブラウザからのアクセスを禁止する
RewriteCond %{REMOTE_HOST} ^example.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4.0 (compatible; MSIE 6.0)$
RewriteRule ^.* - [F,L]
◇特定の検索ロボット(クローラ)に対して、"robots.txt" 以外のアクセスを禁止する
RewriteCond %{HTTP_USER_AGENT} Badbot-1 [NC, OR]
RewriteCond %{HTTP_USER_AGENT} Badbot-2 [NC, OR]
RewriteCond %{HTTP_USER_AGENT} Badbot-3 [NC, OR]
RewriteCond %{HTTP_USER_AGENT} Badbot-n [NC]
RewriteRule !^robots\.txt$ - [F,L]

【解説】"HTTP_USER_AGENT" が、 "Badbot-1", から "Badbot-n" の文字(文字の大小を区別しない)を含むクローラに対して、 "robots.txt" 以外のアクセスを禁止します。
この記述は、"robots.txt" の記述を無視したクローラのアクセスを完全に防ぎます。

*注 クローラのアクセス禁止は、エラーログを肥大させます。回避方法は、検索ロボット対策 をご覧ください。

Google Sponsored

コメント

このページに関する、ご感想やご質問をお寄せください。
お名前と都道府県名は、正確にお書きください。 - 泰山 -

お名前: *必須
都道府県: *必須
コメント: *必須

まだコメントは有りません。