gpt4 book ai didi

regex - 了解 RewriteCond 中的 THE_REQUEST 变量

转载 作者:行者123 更新时间:2023-12-05 04:10:03 25 4
gpt4 key购买 nike

RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\]*)?\HTTP/

除了以下部分,我理解上面一行中的所有内容:

([#?][^\]*)?\HTTP/

我做了一些研究,发现方括号用于匹配其中的任何一个字符。但是,我还了解到 ? 用于使前面的标记可选,而 ^ 表示“匹配开始”。

因此,为什么上述段中的方括号中同时包含 ?^?我认为方括号只是用作“字符类”。

另外,段中HTTP/的具体用途是什么?我的所有搜索都无济于事。

最佳答案

首先了解什么是THE_REQUEST

THE_REQUEST 变量表示 Apache 从您的浏览器收到的原始请求,并且在执行某些重写规则后它不会被覆盖。此变量的示例值为:

GET /index.php?id=123 HTTP/1.1

现在您需要进一步说明的部分:

([#?][^\ ]*)?\ HTTP/

这是这里发生的事情:

  1. 它匹配 ?# 字面意思,因为在 [...] 中几乎所有特殊字符都按字面意思匹配
  2. 后跟一个否定的字符类,匹配除空格以外的任何字符的 0 个或多个字符
  3. ?([#?][^\]*) 之后使其成为可选匹配项
  4. \HTTP 匹配空格后跟 HTTP

现在让我告诉你,这里不需要匹配的 #,因为 Web 服务器永远不会收到 # 之后的 URL。这一切都由客户端浏览器处理。

最好使用这个RewriteCond:

RewriteCond %{THE_REQUEST} ^(.+)\.php(\?\S*)?\ HTTP/ [NC]

关于regex - 了解 RewriteCond 中的 THE_REQUEST 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44993370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com