아파치의 Rewrite 기능을 배울 때. 플래그의 L이 무엇을 하는지 모르겠습니다.
예를 들어 다음 코드는
다음 코드는 실행하기 싫으니 그냥 댓글 달고 직접 삭제하면 되지 않을까요? 왜 L을 사용해야 할까요
習慣沉默2017-05-16 13:01:47
구성 파일에 따르면 후자의 문장은 실제로 불필요합니다. 그러나 이는 귀하가 제공한 구성 예에만 국한됩니다. L
이 쓸모없다는 의미는 아니며, L
에는 여전히 자체 적용 시나리오가 있습니다L
没用,L
还是有它自己的应用场景的
假设
RewriteRule /([0-9]+).html /test1.php?id=
RewriteRule /(.*) /test2.php?id=
这个配置,我的请求是123.html, 那么在请求到达apache的时候,apache会从上到下开始匹配规则:
第一步, 匹配RewriteRule /([0-9]+).html /test1.php?id=
, 发现匹配通过, 因为没有标记停止,所以继续向下执行代码
第二步,匹配RewriteRule /(.*) /test2.php?id=
, 发现匹配通过,因为是最后一条规则,且是通过的规则,则最终请求被导向test2.php?id=123.html
的页面
但是,如果是这样:
RewriteRule /([0-9]+).html /test1.php?id= [L]
RewriteRule /(.*) /test2.php?id=
在第一条匹配通过之后,发现有标记L
,则apache停止向下继续匹配,而是直接就导向了test1.php?id=123
的页面; 而其他的请求(比如:abc.html)只有当第一条规则不通过的时候,才会继续匹配第二条规则, 请求被导向至test2.php?id=abc.html
RewriteRule /([0-9]+ ) .html /test1.php?id=$1
, 중지할 표시가 없기 때문에 일치가 통과된 것으로 확인되었으므로 계속해서 코드를 실행합니다.RewriteRule /(. *) /test2 .php?id=$1
, match가 통과된 것으로 확인됩니다. 마지막 규칙이고 통과된 규칙이므로 최종 요청은 test2 페이지로 이동됩니다. .php?id=123.html
🎜
🎜그러나 그렇다면: 🎜
으아아아
🎜첫 번째 일치 항목이 통과되고 L
표시가 발견되면 Apache는 아래쪽 일치를 중지하고 test1.php?id=123
페이지 및 기타 요청으로 직접 연결됩니다(예: 예: abc.html)은 첫 번째 규칙이 실패하고 요청이 test2.php?id=abc.html< /code>🎜로 전달되는 경우에만 두 번째 규칙과 계속 일치합니다.회신하다0