다시 쓰기 엔진은 URI가 변경되지 않을 때까지 모든 규칙을 반복합니다. 따라서 view.php
은 다음에 규칙을 반복 할 때 ([^/]+)
정규식과 일치합니다.
일부 조건을 추가하는 시도 :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^profile/([^/]+) profile/view.php?username=$1 [L,NC]
편집 : 설명
다시 쓰기 엔진 루프의 비트, 그래서 종류의 변수로 요청 URI를 고려한다. 그리고이 변수는 다시 쓰기 규칙의 정규식과 일치합니다.
규칙이 간단 그래서 경우 :
RewriteRule ^profile/([^/]+) profile/view.php?username=$1 [NC]
이 재 작성 엔진이해야 할 것입니다 것입니다 :
- URI URI를 =
/profile/myname
- 합니까
^profile/([^/]+)
일치? 예
- 그룹화는 "myname"과 일치하며 규칙의 대상에 의해 역 참조됩니다.
- URI =
/profile/view.php?username=myname
- 재 작성 엔진은
- 는 정규식 일치
/profile/view.php
합니까 루프? (쿼리 문자열은 다시 쓰기 규칙에서 일치하는 항목의 일부가 아닙니다) 예
- 그룹화는 "view.php"와 일치하며 규칙의 대상에 의한 역 참조입니다.
- URI =
/profile/view.php?username=view.php
- 재 작성 엔진은 URI를 제외하고 발생
- 같은 일이 더 이상 변경 루프 없기 때문에 재 작성 엔진은
최종 URI를 중지 : /profile/view.php?username=view.php
대단히 감사합니다! 그것은 트릭을했다. 아직도 완전히 이해하지는 못합니다. – Confiqure
@Confiqure 약간의 설명을 추가했습니다. –