IIS6 및 IIS7 및 IIS7.5 : 기본 (쿼리 문자열이 아님)에서 더하기 부호 (+)가있는 URL 처리 이름으로 간단한 Response.Write를 수행하는 ASPX

쿼리 문자열이 아닌 기본 URL에 더하기 기호 (+)가있는 URL의 경우 IIS7 및 IIS7.5 (Windows Server 2008 및 2008 R2)는 URL을 ASP.NET 응용 프로그램의 기본 처리기로 전달하지 않는 것으로 보입니다. . 사용자 지정 HTTP 처리기로 문제를 알리기 시작했지만와 *.html동일한 문제가 *.aspx있습니다. IIS6 (Server 2003)은 동일한 URL에 문제가 없습니다.

문제를 복제하기 위해 ASP.NET 사이트에서 다양한 이름으로 간단한 Response.Write를 수행하는 ASPX 파일 세트를 만들었습니다.

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

세 번째 파일은 IIS7 [.5]가 (문자열에서와 같이) 더하기 기호를 공백으로 취급하는지 확인하기위한 테스트였습니다. 이것은 사실이 아닙니다. 대신에이 파일의 모든으로 타격 http://somehost/test_some+thing.aspx또는 http://somehost/test_some%2bthing.aspx어떤 ASP.NET 처리기에 도착하기 전에 IIS7 / IIS7.5에서 IIS6에서 잘 작동하지만 404 것이다. IIS 7 / 7.5에는 HTTP 처리기를 결정하는 데 사용되는 최종 확장명을 놓치지 않고 URL의 더하기 기호를 “볼”수없는 구성이 있습니까?



답변

IIS와 더하기의 추가 조합을 검색 한 후 IIS7 [.5]는 기본적으로 해당 문자의 사용에 대한 두려움 때문에 더하기 부호가있는 URL을 거부하도록 설정되어 있습니다. 그러나 해당 기호는 여전히 쿼리 문자열에서 허용됩니다. 솔루션 에 requestFiltering 속성의 기본값을 변경하는 <system><webServer><security><requestFiltering>명령 행 호출을 이중으로 인코딩 된 문자를 허용하도록 (궁극적으로 수정하여 ASP.NET의 Web.config) :

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

이것은 웹 사이트에서 선호하는 것보다 조금 더 위험 할 수 있지만 담요가 허용하는 것보다 더 구체적인 방법은 없었습니다. 경고는 URL에서 플러스를 사용하고 일반적인 번역을 공백으로 사용할 때 발생할 수있는 불일치에 관한 것입니다. 다른 대안은 URL에서 더하기 문자 사용을 중지하는 것입니다.


답변

방금 IIS7이 URL의 공백에 플러스를 매핑하도록 설득하기 위해 다시 쓰기 규칙을 만드는 방법을 알아 냈습니다. 필자의 경우 레거시 책갈피 또는 하이퍼 링크를 계속 작동시키는 것이 었습니다.

<?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>

자세한 내용과 참조는 내 블로그 게시물 을 참조하십시오.


답변