【问题标题】:Pattern for matching a rule匹配规则的模式
【发布时间】:2022-11-10 18:30:25
【问题描述】:

我试图为一组规则编写 htaccess。下面是我要匹配的规则模式

0x00|0x01|0x02|0x03|0x04|0x05|0x06|0x07|0x08|0x09|0x0A|0x0B|0x0C|
0x0D|0x0E|0x0F|0x10|0x11|0x12|0x13|0x14|0x15|0x16|0x17|0x18|0x19|
0x1A|0x1B|0x1C|0x1D|0x1E|0x1F|0x7F

我试过0x([01-09]|[0A-0F]|[10-19]|[1A-1F]|7F)

【问题讨论】:

  • 您想使用.htaccess 匹配什么?你想写什么规则? (您要匹配什么请求?)
  • 请编辑以包含示例。一定要显示要匹配的内容。

标签: regex .htaccess


【解决方案1】:

您误导了自己,因为作为人类,您知道“01”、“02”等是一个数字序列。正则表达式不关心数字,他们关心人物. [01-09] 不是指“01 到 09”,而是指“0;或 1 到 0;或 9”——这显然没有意义。

如果你逐个字符分解它,你有:

  • “0”
  • “x”
  • “0”或“1”(在正则表达式中,集合[01]
  • “0”到“9”(字符范围[0-9]),或“A”到“F”([A-F]
  • 加上“0x7F”的特殊情况

所以你可以例如写:

0x[01]([0-9]|[A-F])|0x7F

您可以将两个范围合二为一,给出:

0x[01][0-9A-F]|0x7F

分享0x 实际上并没有缩短它:

0x([01][0-9A-F]|7F)

【讨论】:

    【解决方案2】:

    0x00|0x01|0x02|0x03|0x04|0x05|0x06|0x07|0x08|0x09|0x0A|0x0B|0x0C| 0x0D|0x0E|0x0F|0x10|0x11|0x12|0x13|0x14|0x15|0x16|0x17|0x18|0x19| 0x1A|0x1B|0x1C|0x1D|0x1E|0x1F|0x7F

    这已经是一个正则表达式。您可以完全按照书面形式使用它(作为正则表达式的一部分)。

    但可以简化为:

    0x([01][0-9A-F]|7F)
    

    您可能希望使用(?i) 模式修饰符使此正则表达式不区分大小写。例如:

    (?i)0x([01][0-9A-F]|7F)
    

    或者使用NC (nocase) 标志和.htaccess 中的mod_rewrite 指令。

    顺便说一句,这与您之前的问题在my answer 中使用的正则表达式基本相同:
    Stop redirecting page if the url have control character

    【讨论】:

      【解决方案3】:

      (?i)0x([01][0-9A-F]|7F) 在 AWS WAF 阻止规则中运行良好,除非它阻止了此 URI:

      /apple-touch-icon-120x120.png

      任何想法如何阻止“0x12”而不阻止该或类似的URI?

      【讨论】:

        猜你喜欢
        • 2012-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多