maidsphere

A quantization noise whispers through the net.

特定のリファラを送出するクライアントからのアクセスのみを.htaccessで弾く方法

Apr 9, 2015 00:48:10 JST

たとえば,「あるサイトからの直リンによって転送量が跳ね上がって,今月のAWSの支払いがヤバい」などのシチュエーションがあると思います. .htaccessに下記の設定をするとOKです.

SetEnvIfNoCase Referer "^http://www\.maidsphere\.jp/" kick_ref
order allow,deny
allow from all
deny from env=kick_ref

URIの正規表現は,ブロックしたいリファラにマッチするように書き換えてください.

SetEnvIfNoCaseの利用を強く推奨します. ホスト名は基本的に大文字小文字の区別をしないので,完全性を期すならばCase-insensitiveにしておくべきです. 詳しくはRFC4343をご覧ください.


この制限を特定のファイルだけに限定したい場合は

<Files "ファイル名">
  SetEnvIfNoCase Referer "^http://www\.maidsphere\.jp/" kick_ref
  order allow,deny
  allow from all
  deny from env=kick_ref
</Files>

のように<Files>ディレクティブで囲ってください. ファイル名にパスを含める必要はありません. /var/www/public_html/img/file.pngにあるファイルであればfile.pngだけを記述してください.

なお,<Files>ディレクティブは<Files ~ "RegExp">のように正規表現で指定ができます. しかしマニュアルのFilesディレクティブの項には

Regular expressions can also be used, with the addition of the ~ character. (中略) FilesMatch is preferred, however.

という記述があり,<Files ~ "RegExp">ではなく<FilesMatch "RegExp">の使用を推奨しています. 正規表現でファイル名を指定する場合は<FilesMatch>を利用しましょう.

単純なパターンマッチであれば,?を任意の1文字,*を任意の文字列とするワイルドカード文字列を<Files>ディレクティブでは利用可能です. 正規表現で記述するまでもない単純なパターンは,この表現で記述するとよいと思います.