【问题标题】:Htaccess Rewrite Minimum occurrence of a certain character REGEXHtaccess Rewrite 某个字符 REGEX 的最少出现次数
【发布时间】:2018-08-17 17:15:25
【问题描述】:

我有:

RewriteRule ^([a-z0-9-]{29,}+).php?$ _content.php?_p1=$1 [QSA,L]

不是参数至少为 29,有没有办法我们可以替换它以使其与最少出现 3 个连字符 (-) 的条件相匹配?

'-' 每个网址至少 3 个... ?

【问题讨论】:

    标签: regex .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您应该能够将检查 29 个字符的语句替换为:

    (?=-)(-\w*){3,}
    

    正向先行将首先查找第一次出现的连字符,然后匹配 3 个以上的连字符,然后是单词字符。积极前瞻的原因是绕过.com.net 等中的.,以及您可能在文件夹中看到的正斜杠。

    使用 3 个以上的连字符:DEMO
    没有 3 个以上连字符的断线:DEMO

    【讨论】:

    • RewriteRule ^(?=-)(-\w*){3,}.php?$ _content.php?_p1=$1 [QSA,L] 像这样?
    • 您是否尝试使用 php 之前的实际时间段?因为如果是这样,您需要转义 \.php。实际上,你真的需要逃避的远不止这些……那一行的其余部分都是文字值吗?
    • nope.. 它是重写,所以参数需要是 url 的 slug....这行得通,正如你已经回答的那样.. ^([a-z0-9-]( [a-z0-9-]+)(?=-)(-\w*){3,}+).php?$ _content.php?_p1=$1
    • ^(([a-z0-9-]+)(?=-)(-\w*){3,}+).php?$ _content.php?_p1=$1
    【解决方案2】:

    试试这个:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/([a-z0-9-]{29})(\.php)?$
    RewriteCond %{REQUEST_URI} ^/(([^-]*)\-){3,29}(\.php)?$
    RewriteRule ^(.*)$    _content.php?_p1=$1 [L]
    

    该代码将匹配任何包含 [a-z0-9-]29 长度、带有或不带有 .php 并且至少有 3 连字符的 URI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-09
      • 2010-11-12
      • 2020-08-30
      • 2014-01-21
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多