web-dev-qa-db-ja.com

IIS6とIIS7およびIIS7.5:ベースでのプラス記号(+)付きのURLの処理(クエリ文字列ではない)

(クエリ文字列ではなく)ベースURLにプラス記号(+)が含まれるURLの場合、IIS7およびIIS7.5(Windows Server 2008および2008 R2)は、ASP.NETアプリケーションのデフォルトハンドラーにURLを転送しないようです。 。 *.htmlでカスタムHTTPハンドラーの問題に気付き始めましたが、*.aspxでも同じ問題が発生します。 IIS6(Server 2003)はこれらの同じURLで問題はありません。

問題を再現するために、ASP.NETサイトで、さまざまな名前で単純なResponse.Writeを実行するASPXファイルのセットを作成しました。

  1. test_something.aspx
  2. test_some + thing.aspx
  3. test_something.aspx

3番目のファイルは、IIS7 [.5]がプラス記号をスペースとして処理しているかどうかを確認するテストです(クエリ文字列の場合と同様)。これはそうではないようです。これらのファイルがすべて適切に配置されている場合、http://somehost/test_some+thing.aspxまたはhttp://somehost/test_some%2bthing.aspxを押すとIIS6では正常に機能しますが、IIS7/IIS7.5では404が発生してからASP.NETハンドラーに到達します。 IIS7/7.5で、HTTPハンドラーを決定するために使用される最後の拡張子を欠かさずにURLのプラス記号を「表示」するために欠けている構成はありますか?

39
patridge

IISとplusの組み合わせをさらに検索したところ、IIS7 [.5]は、その文字の使用を恐れているため、デフォルトでプラス記号付きのURLを拒否するように設定されているようです。ただし、その記号はクエリ文字列で引き続き使用できます solution は、<system><webServer><security><requestFiltering>のrequestFiltering属性のデフォルトを変更して、コマンドライン呼び出しで二重にエンコードされた文字を許可します(最終的にASPを変更します。 NET web.config):

%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

これは、自分のWebサイトを使用するよりも少し危険かもしれませんが、全面的な許可よりも具体的にする方法はないようです。警告は、URLでのプラスの使用とスペースとしての一般的な翻訳との間に発生する可能性のある不一致に関するものでした。他の唯一の選択肢は、URLでのプラス文字の使用を停止することです。

40
patridge

URL内のスペースにプラスをマップするようにIIS7を説得するための書き換えルールを作成する方法を見つけました。私の場合、それは古いブックマークやハイパーリンクを機能させ続けることでした。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="True" />
    </security>
    <rewrite>
      <rules>
        <rule name="RewriteUserFriendlyURL1" stopProcessing="false">
          <match url="\+" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="{UrlDecode:{REQUEST_URI}}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

詳細と参照については、 私のブログ投稿 を参照してください。

9
Nathan