2016-06-04 3 views

답변

1

L 플래그는 단순히 따르는 규칙 적용을 중지한다는 의미입니다. 같은 URL, http://example.com/foo/bar?q=blah을 감안할 때, 그리고 규칙을 제공 :

RewriteRule ^foo - 

RewriteCond %{REQUEST_URI} !^/bar.php 
RewriteRule ^(.*)$ /bar.php?z=$1 

첫 번째 규칙이 적용됩니다하고 URI가 변경을 통해 전달되는합니다 (- 대상을 통해). 그러면 다시 쓰기 엔진이 다음 규칙을 처리하고 URI가 /bar.php?z=foo/bar으로 다시 작성됩니다.

RewriteRule ^foo - [L] 

RewriteCond %{REQUEST_URI} !^/bar.php 
RewriteRule ^(.*)$ /bar.php?z=$1 

http://example.com/foo/bar이 첫 번째 규칙에서 그대로을 통해 전달되는 URL은 다음 때문에 L 플래그의 중지 : 당신이 마지막에 L를 추가 할 때 어떤 일이 발생. URL이 http://example.com/something/else을 인 경우에 URI를 재 작성, 첫 번째 규칙이 일치하지 않고 두 번째 규칙이 적용됩니다 : /bar.php?z=something/else

참고 URI가 변경 멈출 때까지 재 작성 엔진이, 모든 규칙을 통해 L 플래그를 루프 때문에 그 이 아닌 경우은 반복을 방지하고 현재 반복에서 적용되는 추가 규칙 만 있습니다.

+0

L의 inseated END 플래그를 사용할 수 있습니까? – khoibn

+0

이것은 글로벌 아파치 설정과 관련이 있습니다. httpd.conf에서'[L]'을 사용하면 여전히 .htaccess에 몇 가지 규칙을 적용 할 수 있습니다. 하지만 게임을 끝내면 .htaccess는 아무 것도 추가 할 수 없습니다. –

+0

@khoibn ** END ** 플래그는 아파치 2.4부터 사용 가능합니다.이 두 플래그 사이의 주요 차이점은 ** 종료 ** 종료입니다. 재 작성 프로세스는 즉각적으로 ** L **은 규칙 처리를 끝내는 반면 계속 루프처럼 작동합니다. – starkeen

관련 문제