2013-10-03 3 views
3

나는 이것이 매우 간단하다고 생각했지만 작동을 거부했습니다. 오래된 URL은IIS URL 다시 쓰기가 쿼리 문자열과 작동하지 않습니다.

http://www.site.com/?q=node/17

그것은 http://www.site.com로 리디렉션 할 필요가있다. 와일드 카드에 대해 걱정할 필요가 없습니다. 걱정할 필요가있는 유일한 쿼리 문자열 매개 변수입니다. 나는 IIS의 내부에 패턴을 테스트 할 수 있습니다

<rule name="Node17" patternSyntax="ExactMatch" stopProcessing="true"> 
    <match url="http://www.site.com/?q=node/17" /> 
    <action type="Redirect" url="http://www.site.com" appendQueryString="False" /> 
</rule> 

처럼 내가 쓴 규칙 외모와는 일치하지만 브라우저에서 URL을 칠 때 리디렉션하지 않습니다. 이견있는 사람?

답변

5

물론 내가 게시 한 후에 알아 냈습니다. 이것은 정확히 일치가 왜 작동하지 않았는지는 확실하지 않습니다.

Microsoft's documentation에서 설명한 바와 같이
<rule name="Node17" stopProcessing="true"> 
    <match url=".*" /> 
<conditions> 
    <add input="{QUERY_STRING}" pattern="q=node/17" /> 
</conditions> 
<action type="Redirect" url="http://www.site.com" appendQueryString="False" /> 
</rule> 
4

:

URL 문자열의 특정 부분이 재 작성 규칙에서 액세스 할 수있는 방법을 이해하는 것이 중요합니다. 이 형태의 HTTP URL의

: HTTP (S) : // {호스트} : {포트}/{경로} {쿼리 문자열}

은 {경로}의 패턴과 일치 규칙. {querystring}은 QUERY_STRING 이라는 서버 변수에서 사용할 수 있으며 규칙 내에서 조건을 사용하여 액세스 할 수 있습니다.

규칙 조건을 사용하면 규칙 평가를위한 추가 논리를 정의 할 수 있습니다 ... 규칙 조건은 규칙 패턴 일치가 완료된 후에 평가됩니다.

는 URL에서 당신은 리디렉션, 당신의 {host} = "www.site.com", {path} = ""{querystring} = "q=node/17"로 다시 싶었다. 따라서 리디렉션하려는 URL의 {path} 부분은 실제로 비어 있으며 질문에 사용한 규칙이 일치되어 일치하지 않습니다.

귀하의 솔루션은 참으로 유효합니다, 그래서 여기에 인용합니다 :

<rule name="Node17" stopProcessing="true"> 
    <match url=".*" /> 
<conditions> 
    <add input="{QUERY_STRING}" pattern="q=node/17" /> 
</conditions> 
<action type="Redirect" url="http://www.example.com" appendQueryString="False" /> 
</rule> 
+0

이것이 내가 당신에게 너무 많은 too..thank 도움 – Blossom

관련 문제