IIS 다시 쓰기, 다시 쓰기 맵 및 쿼리 문자열 같습니다. <rule name=”Rewrite rule for

다시 쓰기 맵을 이해하도록 도와주세요.이 설정이 있습니다.

<rewriteMap name="MyMap">
   <add key="/pages" value="/website/pages/index.aspx" />
   <add key="/pages/page-1" value="/website/pages/page-1/index.aspx" />
   <add key="/pages/page-1/section-1" value="/website/pages/page-1/section-1.aspx" />
</rewriteMap>

내 규칙은 다음과 같습니다.

<rule name="Rewrite rule for MyMap" stopProcessing="true">
   <match url=".*" />
   <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{MyMap:{REQUEST_URI}}" pattern="(.+)" />
   </conditions>
   <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

이 페이지에 액세스하려고하면 작동합니다.

  • www.mydomain.com/pages (확인)
  • www.mydomain.com/pages/page-1 (확인)
  • www.mydomain.com/pages/page-1/section-1 (확인)

그러나이 페이지 중 하나에 쿼리 문자열을 추가 할 수 있기를 원합니다. 예 :

  • www.mydomain.com/pages?page=1 (FAIL)

이 페이지에 액세스하려고하면 404가 표시됩니다. 어떻게 작동합니까?



답변

기본적으로 다시 쓰기 맵을 사용하는 URL 다시 쓰기 규칙은 {REQUEST_URI} 변수와 일치하도록 작성됩니다 . 여기에는 URL + 쿼리 문자열이 포함됩니다. 이를 통해 쿼리 문자열 매개 변수가있는 URL을 일치시키고 다른 페이지에 다시 쓸 수 있습니다. 매우 편리하지만 이것은 분명히 원하는 것이 아닙니다.

쿼리 문자열없이 URL 과만 일치 시키려고합니다. 이를 변경 하려면 조건에서 {REQUEST_URI}{URL} 으로 바꿔야 합니다. 그런 다음 쿼리 문자열이없는 URL 만 다시 쓰기 맵과 일치합니다. 그런 다음 실행 된 스크립트가 여전히 액세스 할 수 있도록 쿼리 문자열을 다시 작성된 URL에 추가 할 수 있습니다.

당신은 다음과 같은 규칙으로 끝납니다 :

<rule name="Rewrite rule for MyMap">
    <match url=".*" />
    <conditions>
        <add input="{MyMap:{URL}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>


답변

사용하는 대신

<add input="{MyMap:{URL}}" pattern="(.+)" />

당신은 또한 시도 할 수 있습니다

<add input="{MyMap:{SCRIPT_NAME}}" pattern="(.+)" />

여기를 봐:

IIS URL Rewrite 2.0에서 작동하도록 정적 리디렉션을 얻을 수 없음


답변