【问题标题】:RewriteCond RewriteRule for .htaccess based on URL to a new page, regular expressionRewriteCond RewriteRule for .htaccess 基于 URL 到新页面,正则表达式
【发布时间】:2011-11-07 22:09:12
【问题描述】:

我有一个有趣的 RewriteRule,但我不确定是否要制作正则表达式。

简而言之,我想根据内容检查第二个 / 之后的 URL,可能是转发。

归结为以下两条规则:

  1. 如果第二个 / 之后的字符串包含任何字母,则重定向
  2. 如果第二个 / 之后的字符串超过 7 个字符,则重定向

以下是示例:

http://www.mysite.org/section/subsection/2011(好吧,什么都不做)

http://www.mysite.org/section/subsection/2011-11(好吧,什么都不做)

http://www.mysite.org/section/subsection/2011-11-09(不行,重定向)

http://www.mysite.org/section/subsection/2011-11-W1(不行,重定向)

请帮我改写规则和重写条件

【问题讨论】:

    标签: regex .htaccess mod-rewrite


    【解决方案1】:

    我基于您的示例中的以下正则表达式,它似乎分析了最后一个“/”而不是第二个之后的所有内容。

    /[^A-Za-z]{1,7}$
    

    在简单的英语中,这个正则表达式匹配一组紧跟在“/”之后并包含 1-7 个非字母字符的字符。为了让它只匹配最后一个'/',我附加了一个'$',它匹配行尾。

    此外,由于您正在处理 URL,您可能需要添加“/?”在 '$' 之前,以防最后有一个悬空的 '/'。

    /[^A-Za-z]{1,7}/?$
    

    我希望这能回答你的问题。

    【讨论】:

      【解决方案2】:

      正如 Lane Aasen 所指出的,您的示例和规则不匹配。我以您的示例表示规则应适用于第三个路径段,并提出以下建议。您不会说重定向目标是否不同,具体取决于哪个规则匹配。我认为它与众不同。

      RewriteEngine on
      # redirect if any letter is contained in 3rd part of path
      RewriteRule ^([^/]+/){2}.*[a-zA-Z] http://www.bbc.co.uk [R=permanent,L]
      # redirect if there are more than 7 characters in 3rd part of the path
      RewriteRule ^([^/]+/){2}.{7,} http://www.ibm.com [R=permanent,L]
      

      【讨论】:

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