다시 쓰기 맵을 이해하도록 도와주세요.이 설정이 있습니다.
<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="(.+)" />
여기를 봐: