2014-03-24 3 views
8

IIS rewrite map condition의 여러 조합으로 상위 30 개 Google 히트 수를 읽었지만 microsoft.com 사이트 또는 다른 곳에서 괜찮은 문서를 찾을 수 없습니다.IIS7의 다시 쓰기 맵 - 선택적으로 일치하는 후행 슬래시가 포함되도록하는 방법?

나는 IIS7에서 후미 슬래시가 있는지 여부에 관계없이 처리하고 싶은 재 작성 맵을 가지고 있습니다. 따라서 www.foo.com/barwww.foo.com/bar/이 모두 규칙과 일치해야합니다.

<rewriteMap name="ShortURLs"> 
    <add key="/terms" value="/en-us/terms-and-conditions/"/> 
    <add key="/privacy" value="/en-us/privacy-and-cookies/"/> 
    <add key="/buy" value="/en-us/where-to-buy/"/> 

    <add key="/terms/" value="/en-us/terms-and-conditions/"/> 
    <add key="/privacy/" value="/en-us/privacy-and-cookies/"/> 
    <add key="/buy/" value="/en-us/where-to-buy/"/> 
</rewriteMap> 

:

<rewrite> 
    <rewriteMaps> 
     <rewriteMap name="ShortURLs"> 
      <add key="/terms" value="/en-us/terms-and-conditions/"/> 
      <add key="/privacy" value="/en-us/privacy-and-cookies/"/> 
      <add key="/buy" value="/en-us/where-to-buy/"/> 
     </rewriteMap> 
    </rewriteMaps> 
    <rules> 
     <rule name="Short URL redirects"> 
      <match url="^/?(.+)/?$" /> 
      <conditions> 
       <add input="{ShortURLs:{REQUEST_URI}}" pattern="(.+)"/> 
      </conditions> 
      <action type="Redirect" url="{C:1}" appendQueryString="true"/> 
     </rule> 
    </rules> 
</rewrite> 

지금이 내가 할 찾을 수있는 유일한 방법은 /terms/ 경기 재 작성 맵의 첫 번째 키가 읽도록지도를 복제하는 것을 제외하고는 완벽하게 잘 작동합니다 이것은 내가 처음부터 정규 표현식을 사용하고 있다는 점을 감안할 때, 우스꽝스럽게 우아하지 않은 것처럼 보입니다. 조건 입력 또는 조건 패턴에 /?을 추가해도 작동하지 않는 것 같습니다. 나는 내가 거기에 댓글을 달았으로, (Using Rewrite Maps in URL Rewrite Module에서 인용) 만 사용할 수 없습니다 정규 표현식을 언급 IIS7 Rewrite Map Regex?the answer을 보았다

, 이것은 "이 오히려 도매보다, 텍스트 전에 제공되는 구체적인 예와 관련 보인다 결코 일할 수 없다 ".

무엇이 누락 되었습니까? 이것을하기위한 수단이 있어야합니다. 나는 명백한 것을 놓치고 있는가?

답변

11

이 그것을 수행해야합니다

<rewrite> 
    <rewriteMaps> 
     <rewriteMap name="ShortURLs"> 
      <add key="terms" value="/en-us/terms-and-conditions/"/> 
      <add key="privacy" value="/en-us/privacy-and-cookies/"/> 
      <add key="buy" value="/en-us/where-to-buy/"/> 
     </rewriteMap> 
    </rewriteMaps> 
    <rules> 
     <rule name="Short URL redirects"> 
      <match url="^(.+?)/?$" /> 
      <conditions> 
       <add input="{ShortURLs:{R:1}}" pattern="(.+)" /> 
      </conditions> 
      <action type="Redirect" url="{C:1}" appendQueryString="true"/> 
     </rule> 
    </rules> 
</rewrite> 

당신은 아주 가까웠다; 나는 세 개의 작은 변화를 만드는 데 필요한 :

  • 경기에 역 참조를 사용
  • 규칙의 경기에서 비 욕심 정량 +?을 사용하여 재 작성 맵의 키에 선도적 인 슬래시를 제거 {R:1} 조건 입력

나는 적절한 문서를 찾는 데 어려움이있는 경험을 공유합니다. 나는 다음과 같은 기사에서 도움을 통해 내 방식을 실험했다 :

+0

Perfect. 고맙습니다! :) –

0

먼저 점을 사용하지 마십시오. 모든 것과 일치하며 자연히 탐욕적입니다. 대신 문자 부정 사용 : ([^\n]+). 시도한 다음 다시 실행하십시오. 문제가 해결되지 않으면 pattern 특성에 /?을 다시 추가하십시오.

+0

모든 예제는 점, FWIW를 사용합니다. 제 질문은 "정규 표현식을 전혀 사용할 수 있습니까?" -''[''[^ \ n] + /?)'또는'([^ \ n] + /?)'로'pattern '을 설정하고'key = "/ buy /"'로 다시 쓰기 맵을 제거하면 'www.foo.com/buy'를 통해 전달되지만'www.foo.com/buy /'는 여전히 404이다. 죄송합니다. Ben에게는 시가가 없습니다. –