htaccess」タグアーカイブ

.htaccessで特定ボットのアクセスを拒否する書き方

最近、「SemrushBot」「Linespider」「BLEXBot」あたりのボットが活発に活動しているようで、Webサーバーに大量のログが残っていました。検索エンジン関係であればボットのアクセスも必要経費と見なせますが、SEO系ボットによるアクセスはサーバーの負荷になるだけなので、余り嬉しくありません。

ということで、特定のボットによるアクセスを拒否したい場合は.htaccessに以下の内容を追加してみると良いと思います。注)

SetEnvIf User-agent "SemrushBot" BadBot
SetEnvIf User-agent "Linespider" BadBot
SetEnvIf User-agent "BLEXBot" BadBot
Deny from env=BadBot

robots.txt

User-agent: SemrushBot
Disallow: /

User-agent: Linespider
Disallow: /

User-agent: BLEXBot
Disallow: /

のようにする方法もありますが、robots.txtを見ないボットもあり一々調べるのも面倒ですから、.htaccessが使えるサーバーであれあば.htaccessで拒否する方が望ましいと思います。


注) SemrushBot、Linespiderなどの文字列はアクセスログからユーザーエージェントを調べてください。(ユーザーエージェントの一部に該当文字列が含まれていれば拒否する設定になっています。)

Apache2.4でのアクセス制限の書き方

Apache2.4では2.2で使っていたOrder allow,denyなどの記述が変更され、新しい書き方になったみたいです。ということで、その書き方を調べてみました。

アクセス制限の書き方

mod_authz_coreを使ったアクセス制限の書き方

全てのアクセスを許可する

<Directory "/admin">
  Require all granted
</Directory>

従来の書き方

<Directory "/admin">
  Order allow,deny
  Allow from all
</Directory>

全てのアクセスを拒否する

<Directory "/admin">
  Require all denied
</Directory>

従来の書き方

<Directory "/admin">
  Order allow,deny
  Deny from all
</Directory>

特定のIPのみアクセスを許可する

<Directory "/admin">
  Require ip 123.456.789.012
</Directory>

従来の書き方

<Directory "/admin">
  Order deny,allow
  Deny from all
  Allow from 123.456.789.012
</Directory>

特定の環境変数がある場合のみアクセスを許可する

<Directory "/admin">
  Require env value
</Directory>

従来の書き方

<Directory "/admin">
  Order deny,allow
  Deny from all
  Allow from env=value
</Directory>

リンク

mod_authz_core – Apache HTTP Server Version 2.4
http://httpd.apache.org/docs/current/mod/mod_authz_core.html

Upgrading to 2.4 from 2.2 – Apache HTTP Server Version 2.4
http://httpd.apache.org/docs/2.4/upgrading.html

Access-Control-Allow-Origin

設置したCGIを違うドメインからでも使えるようにしたい場合は、HTTPヘッダーにAccess-Control-Allow-Originを追加するとできるようになるそうです。

CGI側でヘッダーを追加する場合

次のような感じでHTTPヘッダーを追加します。

print('Access-Control-Allow-Origin: *')
print('Content-Type: text/plain; charset=UTF-8')

上はPythonの例ですが、他のスクリプトでも同様です。

.htaccessで設定する場合

Apacheでmod_headersモジュールが使える場合は次のようにしてもヘッダーに追加できます。

<Files ~ "sample\.cgi$">
  Header set Access-Control-Allow-Origin "*"
</Files>

この場合はスクリプト自体の修正は不要となります。