IIS 7.0 용 Mod Rewrite에서 하위 폴더를 쿼리하도록 리디렉션하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/632360

  •  08-07-2019
  •  | 
  •  

문제

IIS.NET에서 IIS 7.0에 Mod Rewrite를 사용하고 있으며 요청을 리디렉션하려고합니다.

나는 두 가지 규칙을 만들었습니다.

<rule name="ID">
   <match url="/users/([0-9])" />
   <action type="Rewrite" url="/User.aspx?id={R:1}" />
</rule>
<rule name="Name">
   <match url="/users/([a-z])" ignoreCase="true" />
   <action type="Rewrite" url="/User.aspx?name={R:1}" />
</rule>

테스트를 IIS MMC 테스트 대화 상자로 전달하지만 디버그에 있지 않습니다 (URL : http : // localhost : 9080/example.com/users/1 또는 …/사용자/foo)) 그리고 실제 II는 아닙니다!

내가 무엇을 잘못 했습니까?

도움이 되었습니까?

해결책

명백한 문제는 현재 Regexes가 사용자 이름 또는 하나의 숫자 만 일치한다는 것입니다. 여러 글자 나 숫자와 일치하려면 괄호 안에 더하기 정량기를 추가해야합니다. 보다 이 페이지 Regex Quantifiers에 대한 자세한 정보. "/user/"(ID 또는 이름 없음)와 같은 일반 URL과 일치하지 않습니다. 이것이 당신이 의도 한 것인지 확인하십시오.

다른 문제는 IIS가 초기 슬래시 후 첫 번째 문자에서 시작하는 재 작성 규칙을 평가한다는 것입니다. 그래서 당신의 규칙은 일치합니다 /users/([0-9]) REGEX 평가가 발생하면 URL이 users/foo ~ 아니다 /users/foo. 해결책은 사용하는 것입니다 ^ 슬래시 대신 패턴의 시작 부분에서 ( "문자열의 시작"을 의미하는 Regex 캐릭터). 이와 같이:

<rule name="ID">
    <match url="^users/([0-9]+)" />
    <action type="Rewrite" url="/User.aspx?id={R:1}" />
</rule>
<rule name="Name">
    <match url="^users/([a-z]+)" ignoreCase="true" />
    <action type="Rewrite" url="/Users.aspx?name={R:1}" />
</rule>

당신이 선택하고 있습니다 Users.aspx 이 URL 중 하나와 User.aspx 다른 사람을위한 (복수 없음). 이것이 당신이 의도 한 것인지 확인하십시오.

BTW, 내가 생각한 방식은 사용하는 것입니다. IIS는 재 작성 규칙을 문제 해결하기 위해 요청 추적에 실패했습니다. 이것은 이것을 정말 쉽게 진단했습니다. 테스트 요청을하고 추적을 살펴보고 각 재 작성 규칙이 평가되는 위치를 찾을 수있었습니다 ( "Pattern_Match"라는 트레이스의 섹션에 있습니다. 규칙 중 하나의 특정 Pattern_Match의 경우 다음을 보았습니다.

-pattern_match
패턴 /사용자 /([0-9]+?)
입력 사용자/1
거짓을 부정하십시오
거짓 일치했습니다

시작 슬래시가 부족하다는 점에 유의하십시오.

다른 팁

당신은 사용해야합니다 <match url="/users/([0-9]+)" /> 그리고 <match url="/users/([a-z]+)" ignoreCase="true" />, 각각 첫 글자/숫자뿐만 아니라 완전한 ID/사용자와 일치합니다. 그러나 나는 당신의 성분이 왜 단일 자릿수에서 실패했는지 모르겠으므로 다른 문제도 있어야합니다.

두 번째 질문에 관해서는, 내가 완전히 이해하는지 확실하지 않습니다. 폴더 이름과 사용자 이름의 차이점을 어떻게 알 수 있습니까? 폴더에 항상 후행 슬래시가 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top