目 次

IPによるアクセス先の振り分け
外部から要求されたリクエスト URL を Apache の “mod_rewrite” 拡張モジュール(URL書き換えエンジン)を使用し、 正規表現を使って書き換えます。 “Redirect” と異なり、リクエストの URL が実在しなくても転送が可能です。
mod_rewriteはとても便利なApacheのモジュールだ。URLの整形によってSEO効果を高めたい時などによく用いられるだろう。また、覚えやすいURLへ変換する際にも有用であったりする。システムがどのように作られているかを隠匿することに利用している人もいるかもしれない。
ただ、このmod_rewriteは少し曲者で、設定がうまくいかなときに嵌りやすいモジュールでもあると思う。
.htaccessは有効か?
※httpd.confでやる人はここは飛ばそう。
まずは.htaccessが働いているかどうかを確認しよう。.htaccessの中に文法エラーになりそうな文字列を書き込んでみよう。最初の一行に「test」と書くだけでもいい。これでリロードしてみる。
InternalServerErrorになれば大丈夫だ。問題ない。次の項目へ進もう。
エラーにならない場合には、残念ながらまず.htaccessの設定を見直さなければならない。httpd.conf、もしくはそこから読み込まれているファイルで確認することになる。例えばUbuntu10では「/etc/apache2/sites-enabled」のような変わったパスにあったりする。どちらにしても概ね下記のような表現となっている場所を探す。今回はドキュメントルート/var/wwwの直下でしている形で記した。
「/etc/apache2/site-available/default」にあるDirectoryディレクティブに次のように設定します。
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
AllowOverride Allがその表現だ。これがNoneであったら書き換えなければならない。書き換えてApacheを再起動後、改めてリロードしよう。無事にInternalServerErrorになっただろうか。エラーになったのに無事という表現は奇妙だが。
Options を All にすることで、全ての機能を使えるようにします。これにより CGI・SSI などが使えるようになります。そして AllowOverride All とすることで、一般ユーザが自由に設定を変えられるようにします。つまり ~/www/.htaccess による設定変更を許可する、ということです。
mod_rewriteモジュールが有効か?
大抵の場合はhttpdへパスが通っていれば、「httpd -M」で確認だろうか。Ubuntuでは以下のように確認した。
ls /etc/apache2/mods-enabled/
(rewrite.loadが表示される)
有効であることが確認できたら次へ。そうでない場合にはmod_rewriteを有効にしよう。断りが無い場合はUbuntuで書くが、これを読むような人はUbuntu使うのだろうか…。まぁ、いい。
a2enmod rewrite
有効にしたらApacheの再起動をお忘れなく。
ディレクティブ
ディレクティブと書式 | 初期値 | 説明 |
RewriteEngine on/off | off | 書き換えの可否を設定 |
RewriteOptions inherit | - | inherit : 現在の設定値を親ディレクトリの設定値から強制的に継承する。 |
RewriteBase / | / | 書き換えのベースとなるパス(ベースが明白な場合は不要) |
RewriteCondテスト文字列 条件 パターン | - | 条件によるテスト文字列とパターンの比較 |
RewriteRuleパターン 置換対象 | - | パターンを置換対象で置き換える |
オプション
[R] | 強制的にリダイレクト (Redirect) する [R=301] : 永久的に移動。HTTP レスポンスの「301 : Moved Permanently」を返します [R=302] : 一時的な移動。HTTP レスポンスの「302 : Moved Temporarily」を返します、デフォルト |
[F] | 強制的にアクセス禁止 (Forbidden) にする。&br;HTTP レスポンスの「403 :Forbidden」を返します。 |
[G] | 強制的に消去済み (Gone) にする HTTP レスポンスの「410 : Gone」を返します。 もはや存在しないページを消去済みとしてマークします |
[L] | 書き換えが行われたら終了 (Last) にする 現在の書き換え後の URL が後続のルール によってそれ以上書き換えられることを防止します |
[NC] | パターンについて、文字の大小を区別しない(No Case)つまり、”A-Z” と “a-z” は区別されません |
[OR] | 次に続くRewriteCondの判定条件をOR関係で結ぶ(ORオプションをつけない場合はANDの関係になる) |
正規表現
文字 | 説明 |
! | 否定 |
. | 任意の1文字 |
[ ] | 括弧内のいずれかの文字 |
[^ ] | 括弧内のいずれかの文字以外 |
| | また |
? | 直前の文字の0回または1回の繰り返し |
* | 直前の文字の0回以上の繰り返し |
+ | 直前の文字の1回以上の繰り返し |
( ) | 選択範囲の境界を明示する、もしくは後方参照を作成する |
^ | 行頭 |
$ | 行末 |
$n | 0 <= n <= 9) 後方参照。 n番目の( )内の値が入ります |
%{ } | サーバ変数の取得 |
¥ | (日本語環境では円マーク)正規表現の特殊文字をエスケープする |
< | 文字列比較 |
> | 文字列比較 |
= | 文字列比較 |
-d | 指定したディレクトリが存在すればtrue |
-f | 指定したファイルが存在すればtrue |
-s | ファイルが存在し、有限のサイズを持っていればtrue |
-F | アクセス可能な有効なパスを指している場合にtrue(内部サブリクエストを用いてcheckされる) |
-U | アクセス可能な有効なURLとなっている場合にtrue(内部サブリクエストを用いてcheckされる) |
サーバ変数
変数名 | 説明 |
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 /
#ドメインの統一
RewriteCond %{HTTP_HOST} ^(example.com)(:80)? [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
#ディレクトリの移転
RewriteRule ^old_dir(.*)$ /new_dir$1 [R=301,L]
#ファイルの移転
RewriteRule ^old_dir/index.html$ /new_dir/index.html [R=301,L]
#クローラのアクセス禁止
RewriteCond %{HTTP_USER_AGENT} Badbot-1 [NC, OR]
RewriteCond %{HTTP_USER_AGENT} Badbot-2 [NC]
RewriteRule !^robots.txt$ – [F]
RewriteEngine off
~注 書き換え対象に正規表現の特殊文字が含まれている場合は、 “\” (日本語環境では円マーク) でエスケープします。 ~注 書き換え対象 “old_dir” が、 “/” から始まっていないことに注意してください。
~*注 書き換え後 “/new_dir” が、 “/” から始まっていることに注意してください。
ファイルの移転
リクエストに対して、ファイルが移転したことを知らせます。
RewriteRule ^old_dir/index.html$ /new_dir/index.html [R=301,L]
【解説】(行頭から)old_dir/index.html(行末まで)のアクセスを “/new_dir/index.html” にリダイレクトし、ここではファイルが永久に移転したことを通知しています。 書き換えが行われたら終了。
ドメインの統一
サーバーは1つのドメイン、例えば “example.com” に対して、”www.example.com” でもリクエストを受け付けます。
host がサブドメインを使用している場合は、更に “example.host.com” と “www.example.host.com” でも閲覧可能になり、合計4つのサイトにアクセスが分散することになります。
これは、 SEO 対策上あまり好ましいことではありません。 ここでは、”Rewrite” を使って、”www.example.com” に統一する場合を記述します。
◇サブドメインを使用していない場合
RewriteCond %{HTTP_HOST} ^(example.com)(:80)? [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
◇特定のホストからのアクセスを全て禁止する
RewriteCond %{REMOTE_HOST} ^example.com$ [NC, OR]
RewriteCond %{REMOTE_ADDR} ^192.168.1.
RewriteRule ^.* – [F]
【解説】”REMOTE_HOST” が取得できない場合は、 “REMOTE_ADDR” を使用してアクセス制限をかけます。
◇特定のブラウザからのアクセスを全て禁止する
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4.0 (compatible; MSIE 6.0)$ [NC]
RewriteRule ^.* – [F]
◇特定の Referer からのアクセスを全て禁止する
RewriteCond %{HTTP_REFERER} ^http://www.example.com/bad.html$ [NC]
RewriteRule ^.* – [F]
◇特定の Referer 以外からのアクセスを全て禁止する(=特定の Referer からのみアクセスを全て許可する)
RewriteCond %{HTTP_REFERER} !^http://www.example.com/good.html$ [NC]
RewriteRule ^.* – [F]
◇直リンクを全て禁止する
RewriteCond %{HTTP_REFERER} !example.com [NC]
RewriteRule ^.* – [F]
【解説】Referer が “example.com” を含まないリクエストに対して、全てのアクセスを禁止します。
◇画像の直リンクを禁止する
RewriteCond %{HTTP_REFERER} !example.com [NC]
RewriteRule .(jpg|png|gif)$ – [F]
【解説】Referer が “example.com” を含まないリクエストに対して、拡張子が “.jpg” または “.png” または “.gif” へのアクセスを禁止します。
◇特定のホスト & 特定のブラウザからのアクセスを禁止する
RewriteCond %{REMOTE_ADDR} ^192.168.1.
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4.0 (compatible; MSIE 6.0)$
RewriteRule ^.* – [F]
◇特定の検索ロボット(クローラ)に対して、 “robots.txt” 以外のアクセスを禁止する
クローラのアクセス禁止は、サーバの負荷を伴います。 そこで先に、ここに記述する全てのクローラを “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]
【解説】”HTTP_USER_AGENT” が、 “Badbot-1”, から “Badbot-n” の文字(文字の大小を区別しない)を含むクローラに対して、 “robots.txt” 以外のアクセスを禁止します。
※悪質クローラに対する対策の詳細は: 検索ロボット対策 をご覧ください。
mod_rewrite サンプル集
■シンプルなリダイレクト例
■/hoge/ を /fuga/ に rewrite(リダイレクト)する。
RewriteEngine on
RewriteRule ^/hoge/$ /fuga/
■/hoge/ 以下を /fuga/ 以下にまとめて rewrite(リダイレクト)する。
RewriteEngine on
RewriteRule ^/hoge/(.*)$ /fuga/$1
■/hoge/ 以下で末尾が .jpg のリクエストのみを /fuga/ 以下に rewrite(リダイレクト)する。
RewriteEngine on
RewriteRule ^/hoge/(.*.jpg)$ /fuga/$1
■/hoge/ 以下で末尾が .jpg か .gif のリクエストのみを /fuga/ 以下に rewrite(リダイレクト)する。
RewriteEngine on
RewriteRule ^/hoge/(.*).(jpg|gif)$ /fuga/$1.$2
■/cgi-bin/hoge/fuga を /cgi-bin/example.cgi?q=hoge&opt=fuga に rewrite(リダイレクト)(いわゆる、動的アドレスを静的アドレスに変換するってやつ)
RewriteEngine on
RewriteRule ^/cgi-bin/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ /cgi-bin/example.cgi?q=$1&opt=$2
■リダイレクト時のブラウザのURL欄
mod_rewrite で rewrite(リダイレクト)処理を行ったとき、以下のようにサーバパスで rewrite(リダイレクト)させると、ブラウザのURL欄は書き換わらない。
RewriteEngine on
RewriteRule ^/hoge/$ /fuga/
例えば、
http://www.example.com/hoge/ にアクセスすると、
http://www.example.com/fuga/ の中身が、
URL欄は http://www.example.com/hoge/ のまま表示される。
しかし、以下の例では、リダイレクトと同時にURL欄が書き換わる。
RewriteEngine on
RewriteRule ^/hoge/$ /fuga/ [R=301]
RewriteEngine on
RewriteRule ^/hoge/$ /fuga/ [R=302]
RewriteEngine on
RewriteRule ^/hoge/$ http://www.example.com/fuga/
最後の URL にリダイレクトさせるパターンは、同じサーバ内の URL であっても、飛び先を URL で記述するとブラウザのURL欄が書き換わります。
同一サーバ内であれば、URLにリダイレクトさせると無駄にログも増えるのであまりオススメしません。
■%2F問題
Apache1.X 系で mod_rewrite を使う場合、URLに「%2F」が含まれると思い通りに動作しない問題があります。
(Apache2.X 系でも同様ですが、Apache2.0.46 以降では「AllowEncodedSlashes On」により回避できます。)
例えば、以下のような書き換えを記述したとします。
RewriteEngine on
RewriteRule ^/keyword/(.*)$ /cgi-bin/script.cgi?k=$1
想定としては、
http://www.example.com/keyword/hogefuga というアクセスに対して
http://www.example.com/cgi-bin/script.cgi?k=hogefuga の結果を返します。
hogefuga の部分が色々と変化するわけです。
この際、
http://www.example.com/keyword/hogefuga/hage は
http://www.example.com/cgi-bin/script.cgi?k=hogefuga/hage となりますが、
http://www.example.com/keyword/hogefuga%2Fhage は
http://www.example.com/cgi-bin/script.cgi?k=hogefuga%2Fhage とならず、404エラーになります。
直接、
http://www.example.com/cgi-bin/script.cgi?k=hogefuga%2Fhage にアクセスするとこの問題は起きません。
先にも書きましたが、Apache2.0.46 以降では httpd.conf に「AllowEncodedSlashes On」を記述することにより回避できます。
しかし、Apache1.X の環境ではなかなか回避できずにはまる要素だと思います。
■アクセスを拒否する
どこかにリダイレクトするのではなく、特定のアクセスにエラーを返せます。
■.htaccess へのアクセスを拒否する。
RewriteEngine On
RewriteRule .htaccess – [F]
■/hoge/ 以下へのアクセスに 403 Forbidden を返します。
RewriteEngine On
RewriteRule ^/hoge/.* [F]
■/hage/ 以下へのアクセスに 410 Gone を返します。
RewriteEngine On
RewriteRule ^/hage/.* [G]
■複数の RewriteRule
RewriteRule は複数かけます。
■/hoge/ 以下を /fuga/ 以下にリダイレクとした上に /fuga/hage/ 以下のものは /foo/ 以下にリダイレクトする。
RewriteEngine On
RewriteRule ^/hoge/(.) /fuga/$1
RewriteRule ^/fuga/hage/(.) /foo/$1
上の例で、/hoge/ 以下を /fuga/ 以下にリダイレクとさせた時点で処理を終わらせる、つまり次のリダイレクトを実行させないようにするには [L] を付加します。
RewriteEngine On
RewriteRule ^/hoge/(.) /fuga/$1 [L]
RewriteRule ^/fuga/hage/(.) /foo/$1
■RewriteRule のオプション
これ以外にもいろいろありますが。
■HTTPステータスコードを吐く [R=ステータスコード]
RewriteEngine On
RewriteRule ^/hoge/(.) /fuga/$1 [L,R=301]
RewriteRule ^/fuga/hage/(.) /foo/$1
■大文字、小文字を区別しない [NC]
RewriteEngine On
RewriteRule ^/hoge/(.) /fuga/$1 [NC,L]
RewriteRule ^/fuga/hage/(.) /foo/$1
■ある条件が揃ったらリダイレクト
RewriteCond を使えば、ある条件に合致したときだけリダイレクトするということも、もちろん可能です。
■HTTP_HOST が www.example.com だったら RewriteRule を適用する。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^/(.*) /$1
■HTTP_HOST が www.example.com じゃなかったら RewriteRule を適用する。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteRule ^/(.*) /$1
■HTTP_HOST が www.example.com で HTTP_USER_AGENT に MSIE が含まれていたら RewriteRule を適用する。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteRule ^/(.*) /$1
RewriteCond を複数並べると AND でつながっていく。OR にしたい場合は [OR] をつける。
■HTTP_HOST が www.example.com であるか、または HTTP_USER_AGENT に MSIE が含まれていたら RewriteRule を適用する。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$ [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteRule ^/(.*) /$1
RewriteCond の条件で大文字、小文字を区別しない場合は [NC] をつける。
■HTTP_USER_AGENT に MSIE や msie や MsIe や MSiE などが含まれていたら RewriteRule を適用する。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} MSIE [NC]
RewriteRule ^/(.*) /$1
検索ロボット(クローラ)の拒否とアクセス禁止
インターネットに於けるウェブサイトの目的は「コンテンツを世界中に公開する」ことにあります。
そういう意味では、基本的にいかなるアクセスも拒否すべきではありません。
しかしながら、検索サイトのクローラの中には “robots.txt” を遵守しなかったり、短時間にアクセスを集中して相手のサーバに対して多大の負担を掛けるものが存在します。
此処では、”robots.txt” と “.htaccess” を併用して、悪質クローラの拒否とアクセス禁止を効率的に実現してみます。
問題のあるクローラ一覧
Nationality | User-Agent | Name | URL | 概要 | robots.txt | 問題点 |
USA | |ia_archiver | Alexa | alexa.com | サイトのアーカイブ 過去のページを収集・保存しているサイト | 遵守 | 非公開ページへのアクセス ia_archiver |
China | Baiduspider | 百度 | www.baidu.com www.baidu.jp | 中国最大の検索サイト | 一部遵守 | robots.txt 無視 短時間に大量アクセス。 Baiduspider御詫びと対処法? |
China | BaiduImagespider | 百度 | www.baidu.com www.baidu.jp | 中国最大の検索サイトの画像収集ロボット | 一部遵守 | robots.txt 無視。短時間に大量アクセス。 baidu アクセス |
China | yodaobot | 有道 | www.yodao.com | 中国の検索サイト | 遵守 | 短時間に大量アクセス yodaobot |
Koria | NaverBot | Naver | www.naver.com | 韓国の検索サイト | 一部遵守 | 短時間に大量アクセス Googlebot の名称を偽装(GoogleBot) |
Koria | Yeti | Naver | www.naver.com | 韓国の検索サイト | 一部遵守? | 短時間に大量アクセス。NaverBot から名称変更Yeti Naver |
robots.txt で拒否する
クローラは、一番最初に “/robots.txt” を見に行くルールになっています。
従って、拒否したいクローラがあれば、先ずこのファイルに記述します。
“/robots.txt” を無視する(または無視する可能性のある)クローラも敢えて此処に記述しておきます。
そうすることによって、”.htaccess” によるアクセス禁止が効率良く実行され、またサーバの負荷を必要最小限に押さえることが出来ます。
~*注 どのクローラを拒否するかは、ご自分のサイトのアクセス情報を良く分析して、ご自分の判断で行ってください。
“robots.txt” の書き方と設置
1.拒否したい “User-agent: Badbot” を、 “Disallow: /” (全てのファイル収集を拒否)にします。
※”#” は、コメント文であることを意味します。(”//” は、コメント文に使えません)
※大文字小文字は区別しません。
ただし、”User-agent:” と “Disallow:” の項目名については、最初の文字だけを大文字にしておいたほうが良いようです。
※一組ずつ必ず空白行を挟んで記述します。
User-agent: ia_archiver
Disallow: /
#USA Alexa : alexa.com/
User-agent: Baiduspider
Disallow: /
#China Baidu : www.baidu.com, www.baidu.jp
User-agent: BaiduImagespider
Disallow: /
#China Baidu : www.baidu.com, www.baidu.jp
User-agent: yodaobot
Disallow: /
#China Yodao : www.yodao.com
User-agent: Yeti
Disallow: /
#Korea Naver : www.naver.com 29/Mar/2007~
User-agent: NaverBot
Disallow: /
#Korea Naver : www.naver.com ~26/Mar/2007?
2.必ず、 “robots.txt” の名称でサイトの root 直下に置きます。 ディレクトリを意識して書けば、 “/robots.txt” となります。
【参照】
The Web Robots Pages : http://www.robotstxt.org/
robots.txt チェックツール : http://tool.motoricerca.info/robots-checker.phtml
.htaccess によるアクセス制限
“robots.txt” の設置が完了したら、それを無視するクローラのアクセスを禁止します。
◇特定のクローラに対して、 “robots.txt” 以外のアクセスを禁止する
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC, OR]
RewriteCond %{HTTP_USER_AGENT} BaiduImagespider [NC, OR]
RewriteCond %{HTTP_USER_AGENT} yodaobot [NC, OR]
RewriteCond %{HTTP_USER_AGENT} NaverBot [NC, OR]
RewriteCond %{HTTP_USER_AGENT} Yeti [NC]
RewriteRule !^robots.txt$ – [F]
RewriteEngine off
この処理によって、悪意のあるクローラを効率的に禁止することができます。
※ “\” は、日本語環境では半角の円マーク(¥)です。
※ “.htaccess” によるアクセス制限の詳細は、 URL の書き換え Rewrite を参考にしてください。
「防御だけでは飽き足らない!! 一矢報いたい!? かと言ってSPAM行為はしたくないし、、、」
という方は、「究極のロボット対策 ミラー防御」をどうぞ。
.htaccess による究極のロボット対策 ミラー防御
特定のクローラに対して、 “robots.txt” 以外のアクセスを跳ね返します。
・”robots.txt” を除く、全てのアクセスを相手のサイトに跳ね返します。
※おろかな行為を自覚してくれるかもしれません。
・更に、ステータスコードを “R=301” にしておくと、「自分のサイト」にURL変更します。
※自爆攻撃が始まるかもしれません。
~*注 必ず先に、 “robots.txt” でそのクローラの収集作業を拒否しておいて下さい。 なぜなら、そのクローラが「ロボット法」?を遵守する紳士的なクローラであれば、この “RewriteRule” が適用されずに済みますから。
~*注 同じクローラに迷惑をこうむっている、不特定多数の被害者がこの設定をしたら、いかに大手の検索サイトと言えども、サーバダウンしてしまうかもしれません。 くれぐれも、悪意の転用はしないでください。
基本的な書式
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} Badbot [NC]
RewriteRule !^robots.txt$ http://www.bad.com/ [R=301,L]
RewriteEngine off
【解説】 “HTTP_USER_AGENT” に、 “Badbot” の文字(文字の大小を区別しない)を含むリクエストに対して、 “robots.txt” 以外のアクセスを全て “http://www.bad.com/” へリダイレクトし、ファイルが永久に移転したことを通知します。
Baid(中国・百度)のクローラからのアクセスを跳ね返す
RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} BaiduImagespider [NC]
RewriteRule !^robots.txt$ http://www.baidu.jp/ [R=301,L]
【解説】百度のクローラ、 “Baiduspider” と “BaiduImagespider”(画像収集)に対して、 “robots.txt” 以外のアクセスを全て “http://www.baidu.jp/” へリダイレクトします。
RewriteCond %{HTTP_USER_AGENT} NaverBot [NC,OR] # ~26/Mar/2007?
RewriteCond %{HTTP_USER_AGENT} Yeti [NC] # 29/Mar/2007~
RewriteRule !^robots.txt$ http://www.naver.com/ [R=301,L]
【解説】Naver のクローラ、 “NaverBot” と “Yeti” に対して、 “robots.txt” 以外のアクセスを全て “http://www.naver.com/” へリダイレクトします。