refererのないリクエストを受け付けない


ヘッダーに参照元(referer)がないリクエストは受け付けず、アクセスしてきたディレクトリ内のページを表示できない理由をユーザーに伝える方法を示します。

ただしこの設定は、ブックマークなどから直接アクセスしてきたり、セキュリティソフトなどによってrefererを送らないようになっている場合にも正しいページを表示しなくなってしまいますので注意してください。
検索エンジンのロボットに対しても同様かもしれません。

  1. URL Rewrite Module v2.0をインストールしていない場合はインストールします。
    >>> URL Rewrite Module (IIS.net)

    ※現時点(2009/12/09)ではv2.0はRC2です。v1.1では不具合や機能不足なことがあります。
  2. アクセスできない理由を書いたページを作成します。
    ex.) please-send-referer.html
  3. IISマネージャを起動します。
  4. [接続]ウィンドウで、設定の対象となるサイトやディレクトリを選択します。
  5. [URL Rewrite]をクリックします。
  6. [操作]ウィンドウで[Add Rules]をクリックします。
  7. [Add rule(s)]ダイアログで[Blank rule]を選択します。
  8. [Conditions]エリアの[Add Conditions]をクリックします。
  9. 各項目に以下のように入力します。
    Name ルールを識別する任意の名前
    ex.) rule1
    Match URL
    Requested URL Matches the pattern
    Using Regular Expressions
    Pattern .*
    Ignore Case チェックしません。
    Conditions
    Logical Grouping Match All
    Track capture ~ チェックしません。
    Action
    Action Type Redirect
    Action properties
    Redirect type *1 アクセスできない理由ページのURLを記入します。
    相対パスで書くこともできます。
    ex1.) http://www.windows-maniax.com/please-send-referer.html
    ex2.) ../please-send-referer.html
    Append query string チェックします。
    Redirect URL *1 リダイレクトの理由を選択します。
    ex.)Temporary (307)

    *1 v2.0 Betaでは「Redirect type」と「Redirect URL」がこのように書かれていますが、誤植だと思います。

  10. [Conditions]エリアの[Add]をクリックし[Add Condition]ダイアログで以下のように入力します。
    Condition input {HTTP_REFERER}
    Check if input string Matches the pattern
    Pattern ^$
    Ignore Case チェックしません。
  11. [操作]ウィンドウで[適用]をクリックしてください。

以上

[このドキュメントに対応する環境]

  • OS
    • WIndows Server 2008
    • Windows Vista
    • Windows 7
  • IIS
    • 7.0
    • 7.5


タグ: , ,


コメント / トラックバック2件

  1. yonezawagyu より:

    初めまして。Win2008R2+IIS7.5環境で本記事を参考に設定評価を行っています。
    1) リファラありアクセス→目的のページへ遷移
    2) リファラなしアクセス→アクセスエラーページへ遷移

    という動作は行えているのですが、2) のアクセスを行った後に 1) のアクセスを行うとエラーページへ遷移してしまいます。( 2) のアクセス時のエラーページをキャッシュしてしまっているように見える)

    ブラウザ(IE)キャッシュが原因かと思いキャッシュ削除を行いましたが現象は変わりません。
    IIS側のDefault Web Siteの再起動しても動作は変わらず。
    結局、仮想Webサイトの入れ替え(IISを停止し、仮想Webサイトのフォルダ名を変更→元に戻す)で 1) のアクセスが目的のページへ遷移されるようになりました。

    上記の原因が分かりましたらご教示願います。
    ※URL Rewrite Module の「リダイレクトの種類」で「永続的(301)」を指定しています。
     これを指定することで、上記の動作となるようなことがあるのでしょうか?

  2. 浅見 城輝 より:

    headにキャッシュをしないようなmetaタグを入れてみるといかがでしょうか?
    http://support.microsoft.com/kb/234067/ja

    同じ操作で同じ現象がおきたことはないのでわからないこともあるのですが、似たような現象としてIEのキャッシュの動きは思ったのと違うことが起こることもあるようには感じてます。
    ですので私は、キャッシュが気になるときはChromeでキャッシュを無効にしてテストしたりしてます。

コメントをどうぞ