2017-02-15 3 views
0

이전 URL을 새 URL로 리디렉션하려면 web.config 파일에서 RewriteMap을 사용하고 있습니다..NET RewriteMap을 사용하여 후행 슬래시가 있거나없는 이전 URL에서 작동하도록하십시오.

<rule name="Localhost Rewrite Rules" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions> 
     <add input="{HTTP_HOST}" pattern="^(.*\.)?example\.com$" /> 
     <add input="{lhRewrites:{REQUEST_URI}}" pattern="(.+)" /> 
     </conditions> 
     <action type="Redirect" appendQueryString="false" url="{C:1}" redirectType="Permanent" /> 
    </rule> 

유의하시기 바랍니다, 패턴을 intentially 하드 코드이 각 도메인 이름에 대한 특정 규칙의 더 큰 세트의 일부로서 도메인을 다음과 같이 규칙은 현재이다. 그래서 나는 일반적으로 규칙을 최적화하거나 재 작성 (말장난을 변명)하려고하지 않습니다.

rewriteMap.config 파일은 다음 리디렉션을 포함 : 나는 http://example.com/old를 방문 할 때

<rewriteMap name="lhRewrites"> 
    <add key="/old" value="/new" /> 
</rewriteMap> 

현재 규칙이 잘 작동 - 그것은 http://example.com/new로 리디렉션합니다.

그러나 '이전'URL에 슬래시 (예 : http://example.com/old/)가 포함되어 있으면 작동하지 않습니다. 이전 URL에 슬래시가 있는지 여부와 관계없이 작동해야합니다.

모든 매핑 키를 복제하지 않아도됩니다.

감사합니다.

답변

0

정규 표현식 ^(.*[^/])(\/?)$에 슬래시가없는 URL을 일치시킨 다음이 일치 된 URL을 다시 쓰기 맵에 전달하면됩니다. 규칙은 다음과 같아야합니다.

<rule name="Localhost Rewrite Rules" stopProcessing="true"> 
    <match url="^(.*[^/])(\/?)$" /> 
    <conditions> 
    <add input="{HTTP_HOST}" pattern="^(.*\.)?example\.com$" /> 
    <add input="{lhRewrites:/{R:1}}" pattern="(.+)" /> 
    </conditions> 
    <action type="Redirect" appendQueryString="false" url="{C:1}" redirectType="Permanent" /> 
</rule>