2016-09-19 1 views
0

일부 IIS 리디렉션 규칙을 작동 시키려고 시도하는 벽돌 벽에 머리를 두드리는 소리가났습니다. 스택 오버플로와 IIS.net에서 검색하고 읽었지만 전혀 작동하지 않습니다.IIS 재 작성 모듈 - 유지 경로 및 쿼리 문자열을 리디렉션하지만 추가 쿼리 문자열 매개 변수를 추가하는 방법은 무엇입니까?

로컬 (실제) IIS에서 시도 중이므로 2.0 모듈을 다시 작성하고 복구를 시도했습니다. 내가 언급 한 것보다 더 많은 시간에 admin cmd 라인에서 iisreset을 수행했습니다.

내 호스트 파일에 my.test.com URL에 대해 127.0.0.1을 설정했습니다.

기존 경로와 쿼리 문자열 값이있는 경우 추가 매개 변수를 사용하여 하위 도메인 URL을 기본 도메인 URL로 리디렉션합니다. 웹 사이트의 루트 폴더에있는

I 설정 3 개 규칙을 다음과 같이

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="PathAndQueryString" enabled="true" stopProcessing="true"> 
       <match url="(/\w*)(\?\w*=\w*)([&amp;\w*=\w*]*)" /> 
       <action type="Redirect" url="https://www.test.com{R:1}{R:2}{R:3}&amp;param=value" appendQueryString="false" /> 
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
      <rule name="Querstring" enabled="true" stopProcessing="true"> 
       <match url="(\?\w*=\w*)([&amp;\w*=\w*]*)" /> 
       <action type="Redirect" url="https://www.test.com{R:1}{R:2}&amp;param=value" appendQueryString="false" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
      <rule name="DomainOnly" enabled="true" stopProcessing="true"> 
       <match url=".*" /> 
       <action type="Redirect" url="https://www.test.com?param=value" appendQueryString="false" /> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       </conditions> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

불행하게도 패턴을 테스트하고 {R을 : X} 확인에도 불구하고 내가 사용이를 테스트 할 때 캡처이 올바른지 Edge, Chrome, Firefox 및 IE는 모두 IIS 규칙이없는 것처럼 작동합니다.

테스트 :

없음, 그들은 리디렉션없이 제공받을 .

나는 또한 URL 패턴의 일부로 사용 된 조건 패턴을 넣으려고했지만 그 중 하나와도 작동하지 않는다. 사실 나는 규칙을 호스트의 포함하지 않는 사이트의 루트에 넣었을 때 여전히 아무것도 작동하지 않는다고 말하는 Stack Overflow 게시물을 읽은 후 조건으로 옮겼습니다.

도움을 주시면 감사하겠습니다.

UPDATE 1 경로 및 쿼리 문자열은 규칙 (/w \ *)이 패턴의 시작에서 굵은 부분을 제거하려. 아무런 효과가 없었습니다.

업데이트 2 : 기능을 "실패한 요청 추적"매우 변덕을 가능하게 시도하고 실제로 작동 될 때이 일치 URL 패턴 중 어느 것도 지금의 발로 시작했다 3 규칙을 제외하고, 일치되지 않는 것을 말한다 및 리다이렉트하지만 명백한 이유로 경로와 다른 쿼리 문자열 매개 변수를 유지 관리하지는 않습니다.

업데이트 3 : Edge 및 IE에서는 아무 규칙도 작동하지 않습니다. Chrome 및 FF에서는 리디렉션 만 작동하는 것처럼 보입니다. 그러나 도메인 만 규칙을 사용 중지하고 IIS를 다시 시작하면 규칙이 그대로 유지됩니다. FFS를 사용하면이 쓰레기가 내 피를 바로 끓이기 시작합니다. 그다지 어렵지 않아야합니다.

답변

1

답변을 보내기 전에 iis에서이 게시물의 사본에 응답 한 Microsoft의 Yuk Ding에게 외치십시오.그물 포럼 및 답변의 대부분을 제공합니다.

URL이 1에서 URL로 리디렉션되는 규칙을 다시 작성하고 경로가있는 경우 쿼리 문자열이 존재하면 동시에 하드 코드 된 URL 매개 변수에 해당 & 또는?을 추가하는 것이 좋습니다. 다음은 필요한 규칙입니다.

my.test.com에서 www.test.com으로 리디렉션되는 규칙에서 아래 규칙에 따라 2 개의 URL을 바꾸고 하드 코드 된 매개 변수 "ExtraParam = SomeValue"를 다음과 같이 바꿔야합니다. 당신이 필요로하는 것. 내 눈에

<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="DomainOnly" enabled="true" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
       <add input="{REQUEST_URI}" pattern="/.+" negate="true" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com?ExtraParam=SomeValue" redirectType="Temporary" /> 
     </rule> 
     <rule name="PathOnly" enabled="true" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{REQUEST_URI}" pattern="/.+" /> 
       <add input="{REQUEST_URI}" matchType="Pattern" pattern="\?.+" ignoreCase="true" negate="true" /> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com{C:0}?ExtraParam=SomeValue" redirectType="Temporary" /> 
     </rule> 
     <rule name="Querstring" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions trackAllCaptures="true"> 
       <add input="{REQUEST_URI}" pattern="/.+" /> 
       <add input="{QUERY_STRING}" pattern=".*" /> 
       <add input="{HTTP_HOST}" pattern="my.test.com" /> 
      </conditions> 
      <action type="Redirect" url="http://www.test.com{C:0}&amp;ExtraParam=SomeValue" appendQueryString="false" redirectType="Temporary" /> 
     </rule> 
    </rules> 
</rewrite> 

의 URL 재 작성 2.0 모듈은 버그가 있습니다. 기본 요점은 모든 조건을 충족해야하는 주된 경기 패턴에서 어떤 것도 일치시킬 수 없다는 것입니다. 따라서 당신이 (. *) 이외의 다른 것과 일치 시키려고한다면, 원래 내가 한 것처럼 아무것도하지 않기 때문에 당신이 원한 것을하지 않을 것이고 효과적으로 머리를 움직일 것이기 때문에 당신이 match에 대한 패턴을 설정할 수 있다는 사실은 완전히 무의미하다. bashing-brick-wall-ness.

IIS 관리자에서이 UI는 매우 도움이되지 않습니다. 당신은 패턴을 테스트 할 수 있습니다 - 그리고 내가 한 - 그리고 그들은 일할 것이지만, 실제로 테스트하는 것은 모두 regEx 패턴입니다.

정말 필요한 것은 규칙 수준에서의 테스트입니다. 즉, URL을 입력하면 규칙이 일치하고 통과 또는 실패하는 조건이 있는지를 알려줍니다. 예. 요청 추적 규칙을 사용하지 않으면이 정보를 얻을 수 있지만 길어지기 쉽고 오래 걸리는 방식으로 작동합니다 (이전 로그를 지우고 로그를 멈추고 로그 오프 할 때까지 기다리십시오. 다시는) 사소한 일을해야합니다.