【问题标题】:Different Regex element in htaccess REQUEST_URI Explaination?htaccess REQUEST_URI 解释中的不同正则表达式元素?
【发布时间】:2020-03-25 16:39:48
【问题描述】:

我是 regex 的新手,我正在努力理解这个的每一个组成部分

RewriteCond  %{REQUEST_URI} !^/main/(web/.+|index.php|robots.txt)$

我明白我们采用 URL,如果它等于 /main//main/web/index.php//main/web/robot.txt,我们将执行 RewriteRule

但我很难理解REQUEST_URI 之前的%.+|index.php|robots.txt 中的每个正则表达式元素的含义。

【问题讨论】:

    标签: regex .htaccess url request


    【解决方案1】:

    我很难理解 % 之前的 REQUEST_URI 是什么

    REQUEST_URI 是 Apache 服务器变量。 %{...}“包装器”只是用于在此上下文中访问该服务器变量值的语法。

    ...以及.+|index.php|robots.txt 中的每个正则表达式元素的含义。

    ...如果它等于 /main//main/web/index.php//main/web/robot.txt

    实际上,它不等于其中任何一个。子模式(web/.+|index.php|robots.txt) 是正则表达式alternation。它是一个“或”结构。它匹配由竖线 (|) 符号分隔的任一子模式。

    所以,下面的正则表达式:

    ^/main/(web/.+|index.php|robots.txt)$
    

    匹配任一:

    • /main/web/<something> - <something>.+ 正则表达式表示(1 个或多个任意字符,换行符除外)。
    • /main/index.php - 尽管正则表达式中的点 (.) 匹配任何字符。因此,这也可以匹配/main/index-php/main/indexAphp 等。点应该在正则表达式中转义以匹配文字点。例如。 index\.php
    • /main/robots.txt - 与上面关于正则表达式中未转义的点的评论相同。

    请注意,在这种情况下,整个 CondPatternRewriteCond 指令的第二个参数)以 ! 为前缀 - 这否定了整个表达式。因此,当正则表达式 not 匹配时,该指令成功。换句话说,当请求的 URL 路径 (REQUEST_URI) 不是上述 URL 之一时。

    【讨论】:

    • 非常感谢您向我解释,我现在明白了!
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多