gpt4 book ai didi

regex - .htaccess 正则表达式差异/优点/缺点

转载 作者:行者123 更新时间:2023-12-03 21:14:01 26 4
gpt4 key购买 nike

我的 .htaccess 中有一堆规则(子域、文件夹、用户特定的文件夹等...)

我现在正在使用这个正则表达式:
([a-z0-9A-Z])
我正在寻找一个特定的规则,我找到了多种构建它的方法,我想知道
如果有这些的标准做法?使用以下内容的区别/优点/缺点是什么:

  • ([^.]+)
  • ([^/]+)
  • (.*)
  • ([a-z0-9]+)
  • 最佳答案

    假设我们有这个 .htaccess:

    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?request=$1 [L]

    您的问题中提到的表达式将具有以下逻辑:

    ^(.*)$
  • . : 匹配任意字符和任意单个字符
  • * : 匹配零个或多个前一个符号

  • 基本上它会匹配以下内容:
  • folder1/file1.html :$1 将 folder1/file1.html
  • file1.html :$1 将是 file1.html

  • 这样很容易在 PHP 或 Python 中解析整个请求。另一方面,您不会过滤 URL 中的任何不需要的字符,您必须在脚本中验证这些字符。

    例子: =@*-+
    ([^.]+)
  • [] : 匹配方括号内的任何符号
  • [^] : 匹配大括号内列出的字符以外的任何字符 ( ref )。
  • + : 匹配一个或多个前一个符号
  • [^.] : 匹配除 . 以外的任何内容特点。当出现 . 时将停止匹配找到字符

  • 来自 ref .

    The only special characters or metacharacters inside a character class are the closing bracket (]), the backslash (), the caret (^) and the hyphen (-). The usual metacharacters are normal characters inside a character class, and do not need to be escaped by a backslash. To search for a star or plus, use [+*]. Your regex will work fine if you escape the regular metacharacters inside a character class, but doing so significantly reduces readability.



    基本上它会匹配以下内容:
  • folder1/file1.html :$1 将 folder1/file1
  • file1.html :$1 将是 file1

  • 这与第一个效果相同,只是去掉了点 . 之后的所有内容。

    ^([^/]+)$
  • [] : 匹配方括号内的任何符号
  • + : 匹配一个或多个前一个符号
  • ^ : 匹配字符串的开头
  • [^/] : 匹配除 / 以外的任何内容特点。当出现 / 时将停止匹配找到字符

  • 这与第一个效果相同,除了这将检查直到 / 的任何请求。 .因此,如果您有多个文件夹,则必须多次包含此正则表达式。

    基本上它会匹配任何东西(如果你只有一套):
  • folder1/file1.html :$1 将 folder1
  • file1.html :$1 将是 file1.html

  • 如果你有 2 个:
  • folder1/file1.html :$1 将 folder1和 $2 将匹配 file1.html
  • file1.html :$1 将是 file1.html

  • 您拥有的文件夹越多,您可能需要添加的规则就越多。

    ^([a-z0-9]+)$ [ ^([a-z0-9.]+)$ 对于这个例子]
  • [] : 匹配方括号内的任何符号
  • + : 匹配一个或多个前一个符号
  • a-z : 匹配从 a 到 z 的字母
  • 0-9 : 匹配从 0 到 9 的数字

  • (您也可以使用\d 或\w)

    基本上它会匹配任何东西(如果你只有一组 - 添加点):
  • folder1/file1.html :$1 将 folder1
  • file1.html :$1 将是 file1.html

  • 如果你有 2 个:
  • folder1/file1.html :$1 将 folder1和 $2 将匹配 file1.html
  • file1.html :$1 将是 file1.html

  • 除了您必须指定您想要的字符外,这个与前一个类似。因此,当您在 PHP 中检查字符串时,您就知道得到了哪些字符。
    就像在我的文件名示例中一样,我必须添加 \.所以它识别点。这也更快执行。

    查看基准: .htaccess mod_rewrite performance

    因此,如果您知道将收到哪种类型的请求,您可以始终使用最后一个,但如果您不确定,则必须选择更适合您需要的请求。它们之间可能存在更多差异,但理解这些正则表达式的主要目标是理解它们的作用或捕获。此外,性能是您需要考虑的事情。匹配所有内容然后在 PHP 或 Python 中解析请求可能比最初简单地匹配它们并简单地在脚本中使用它们需要更长的时间。

    关于regex - .htaccess 正则表达式差异/优点/缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254052/

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