Regex htaccess请求_URI解释中的不同正则表达式元素?
我是新来的正则表达式,我正在努力理解它的每一个组成部分Regex htaccess请求_URI解释中的不同正则表达式元素?,regex,.htaccess,url,request,Regex,.htaccess,Url,Request,我是新来的正则表达式,我正在努力理解它的每一个组成部分 RewriteCond %{REQUEST_URI} !^/main/(web/.+|index.php|robots.txt)$ 我知道我们使用URL,如果它等于/main/,/main/web/index.php/或/main/web/robot.txt,我们将执行重写规则 然而,我很难理解%之前的请求URI以及+\index.php | robots.txt中的每个正则表达式元素的含义 在请求URI之前,我很难理解什么是% REQ
RewriteCond %{REQUEST_URI} !^/main/(web/.+|index.php|robots.txt)$
我知道我们使用URL,如果它等于/main/
,/main/web/index.php/
或/main/web/robot.txt,我们将执行重写规则
然而,我很难理解%
之前的请求URI
以及+\index.php | robots.txt
中的每个正则表达式元素的含义
在请求URI之前,我很难理解什么是%
REQUEST\u URI
是Apache服务器变量。%{…}
“包装器”只是用于在此上下文中访问该服务器变量值的语法
。。。而+|index.php | robots.txt
中的每个正则表达式元素都表示
。。。如果它等于/main/
,/main/web/index.php/
或/main/web/robot.txt
事实上,这两个都不相等。子模式(web/+|index.php | robots.txt)
是regex替换。它是一个“或”结构。它匹配由管道(|
)符号分隔的任一子模式
因此,以下正则表达式:
^/main/(web/.+|index.php|robots.txt)$
匹配以下任一项:
/main/web/
-
由+
正则表达式(任何字符中的1个或多个,新行除外)表示
/main/index.php
——尽管正则表达式中的点(
)与任何字符匹配。因此,这也可以匹配/main/index php
,/main/indexapp
等。该点应该在正则表达式中反斜杠转义以匹配文字点。例如,index\.php
/main/robots.txt
-与上面关于正则表达式中未缩放点的注释相同
请注意,在这种情况下,整个CondPattern
(RewriteCond
指令的第二个参数)的前缀是代码>-这将否定整个表达式。因此,当正则表达式不匹配时,该指令是成功的。换句话说,当请求的URL路径(REQUEST\u URI
)不是上述URL之一时
在请求URI之前,我很难理解什么是%
REQUEST\u URI
是Apache服务器变量。%{…}
“包装器”只是用于在此上下文中访问该服务器变量值的语法
。。。而+|index.php | robots.txt
中的每个正则表达式元素都表示
。。。如果它等于/main/
,/main/web/index.php/
或/main/web/robot.txt
事实上,这两个都不相等。子模式(web/+|index.php | robots.txt)
是regex替换。它是一个“或”结构。它匹配由管道(|
)符号分隔的任一子模式
因此,以下正则表达式:
^/main/(web/.+|index.php|robots.txt)$
匹配以下任一项:
/main/web/
-
由+
正则表达式(任何字符中的1个或多个,新行除外)表示
/main/index.php
——尽管正则表达式中的点(
)与任何字符匹配。因此,这也可以匹配/main/index php
,/main/indexapp
等。该点应该在正则表达式中反斜杠转义以匹配文字点。例如,index\.php
/main/robots.txt
-与上面关于正则表达式中未缩放点的注释相同
请注意,在这种情况下,整个CondPattern
(RewriteCond
指令的第二个参数)的前缀是代码>-这将否定整个表达式。因此,当正则表达式不匹配时,该指令是成功的。换句话说,当请求的URL路径(REQUEST\u URI
)不是上述URL之一时。非常感谢向我解释,我现在明白了!谢谢你给我解释,我现在明白了!