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之一时。

非常感谢向我解释,我现在明白了!谢谢你给我解释,我现在明白了!