代码之家  ›  专栏  ›  技术社区  ›  Jon M

在mod rewrite中匹配“句号”

  •  0
  • Jon M  · 技术社区  · 14 年前

    目前,我只是在.htaccess文件中匹配数字、字母、破折号和下划线:

    RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?folder=$1
    

    我还想在字符串中匹配句号。我不想使用:

    (.*)
    

    ([.A-Za-z0-9-_]+)
    ([\.A-Za-z0-9-_]+)
    ([\\.A-Za-z0-9-_]+)
    ([A-Za-z0-9-_\.]+)
    

    ----------附加信息----------------

    例如:

    mydomain.com/groups/green/应该转到index.php?folder=green

    除此之外,我还在上面重新编写子域(我认为这是造成复杂性的原因)。。。

    anotherdomain.com应该映射到index.php?folder=anotherdomain.com

    我已使用以下规则成功地重新编写了子域:

    # external group domain name
    RewriteCond %{ENV:Rewrite-Done} !^Yes$
    ## exclude requests from myhost.com
    RewriteCond %{HTTP_HOST} !^www\.myhost\.com
    ## allowed list of domain masking domains
    RewriteCond %{HTTP_HOST} ^(anotherdomain.com|extra.domain.com|external.otherdomain.com)
    RewriteRule (.*) /groups/%1/$1
    

    ----------------解决方案----------------------

    尽管没有找到解决上述问题的方法,我还是通过将第一个重定向(映射外部域)改为:

     RewriteRule (.*) /groups/%1/$1
    

    RewriteRule (.*) /groups/external/$1&external_domain=%1
    

    第二次重写(在文件夹上)可以解释“externaldomain”变量而不是文件夹。

    1 回复  |  直到 14 年前
        1
  •  1
  •   John Kugelman Michael Hodel    14 年前

    你的第一个选择是最简单和正确的。内方括号 . 没有特别的意义,所以你可以一字不差地包含它,而不需要任何特殊的转义。

    实际上第二个破折号有个小问题 0-9-_

    ([-.A-Za-z0-9_]+)
    

    如果这不起作用,那你的重写规则就出了问题。例如,如果这是一个全局规则而不是每个目录(没有重写基),那么URL将以斜杠开头 / .