RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
我理解上面一行中的所有内容,但以下段除外:
([#?][^\ ]*)?\ HTTP/
我做了一些研究,发现方括号用于匹配其中的任何一个字符。但是,我还了解到?
用于使前面的标记可选,^
表示“匹配开始。”
因此,为什么上面段中的方括号包含?
和^
?我认为方括号只是用作“字符类”。
此外,细分中HTTP/
的具体目的是什么?我的所有搜索都无济于事。
答案 0 :(得分:2)
首先了解什么是POST
。
THE_REQUEST
变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。此变量的示例值为:
THE_REQUEST
现在你需要更多澄清的部分:
GET /index.php?id=123 HTTP/1.1
以下是这里发生的事情:
([#?][^\ ]*)?\ HTTP/
或?
完全匹配,因为在#
内,几乎所有特殊字符都按字面匹配[...]
使其成为可选匹配项后,?
([#?][^\ ]*)
匹配后跟\ HTTP
现在让我告诉您,此处不需要匹配HTTP
,因为网络服务器永远不会在#
之后收到网址。这一切都由客户端浏览器处理。
最好使用此#
:
RewriteCond