찾다

 >  Q&A  >  본문

php - Apache 재작성에 관한 질문

아파치의 Rewrite 기능을 배울 때. 플래그의 L이 무엇을 하는지 모르겠습니다.
예를 들어 다음 코드는

으아아아

다음 코드는 실행하기 싫으니 그냥 댓글 달고 직접 삭제하면 되지 않을까요? 왜 L을 사용해야 할까요

我想大声告诉你我想大声告诉你2867일 전513

모든 응답(1)나는 대답할 것이다

  • 習慣沉默

    習慣沉默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

    가설🎜 으아아아 🎜이 구성을 사용하면 내 요청은 123.html이고 요청이 Apache에 도달하면 Apache는 위에서 아래로 규칙 일치를 시작합니다.
    첫 번째 단계 matchRewriteRule /([0-9]+ ) .html /test1.php?id=$1, 중지할 표시가 없기 때문에 일치가 통과된 것으로 확인되었으므로 계속해서 코드를 실행합니다.
    두 번째 단계, matchRewriteRule /(. *) /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
  • 취소회신하다