【mod_rewrite】特定の参照元からのアクセスを拒否もしくはリダイレクトする
mod_rewriteを利用して、特定のサイト(参照元)からアクセスがあった場合、アクセスを拒否したり、指定したURLにリダイレクトさせる方法を紹介します。
スポンサードリンク
特定のサイトからのアクセスを拒否
「abc.com」というサイトからのアクセスを全て拒否したい場合、サーバー設定ファイルである.htaccessに以下を記述します。
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?abc.com [NC]
RewriteRule ^.*$ – [NC,F,L]
これですべてのアクセスを禁止(403エラー)にできます。
解説
基本事項としてmod_rewrite、RewriteRule、RewriteCondを読んでください。
「http://abc.com/345.html」からサイトにアクセスがあった場合、サーバ変数である「%{HTTP_REFERER}」には「http://abc.com/345.html」が渡されます。
そして「^http(s)?://(www\.)?abc.com」とのマッチングを行い、この場合マッチするのでRewriteRuleの処理が実行されます。
RewriteRuleのパターン部分「^.*$」には「345.html」が渡され、正規表現でマッチしますので、フラグの「F」でアクセス禁止にします(403エラーを返す)。
「NC」は大文字小文字の区別をしない、「L」はURL書き換え処理を中止し、それ以降の書き換えをしないようにするフラグです。
特定のサイトからのアクセスをリダイレクト
「abc.com」というサイトからのアクセスを全て任意のページにリダイレクトしたい場合、サーバー設定ファイルである.htaccessに以下を記述します。
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?abc\.com [NC]
RewriteRule ^.*$ http://www.yahoo.co.jp/ [R=301,L]
これで「abc.com」というサイトからのアクセスを全て「http://www.yahoo.co.jp/」に301リダイレクトできます(自サイトのページなど何でも指定できます)。
解説
「http://abc.com/hoge/345.html」というページからアクセスがあった場合、サーバ変数「%{HTTP_REFERER}」には「http://abc.com/hoge/345.html」が渡されます。
これはRewriteCondの条件パターン「^http(s)?://(www\.)?abc\.com」とマッチするので、RewriteRuleが適用されます。
すなわち、「^.*$」には「hoge/345.html」が渡され正規表現マッチし、「http://www.yahoo.co.jp」に301リダイレクトがかけられます。
なお、「R=301」は指定URLに301リダイレクトするフラグです。
Warning: count(): Parameter must be an array or an object that implements Countable in /home/yskymk/www/000web/ysklog/mod-rewrite/wp-includes/class-wp-comment-query.php on line 405
コメント
2:管理人:2014/12/21 22:49:12
その記述で「def.abc.com」からのアクセスをすべてYahooのトップページにリダイレクトできます。
念のためサブドメインを作成して実験したところ、上手く処理ができました。
3:hiro:2014/12/27 21:27:32
お忙しいところ、動作確認までしていただきありがとうございました。今後も、記事を楽しみにしています。
1:hiro:2014/12/20 21:50:27
とてもわかりやすい解説で大変助かりました。基本的なこと恐縮ですが、サブドメインの特定サイトからのリンクをリダイレクトする場合は、下記の理解で宜しいでしょうか?ご教授頂けるとありがたいです。よろしくお願いします。
リンク元がdef.abc.comの場合
リダイレクトがhttp://www.yahoo.co.jp/の場合
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?def\.abc\.com [NC]
RewriteRule ^.*$ http://www.yahoo.co.jp/ [R=301,L]