RewriteCond RewriteRule for .htaccess基于URL到新页面,正则表达式

时间:2011-11-07 22:09:12

标签: regex .htaccess mod-rewrite

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

简而言之,我想检查第二个/之后的URL - 基于内容,可能是前进。

总结为这两条规则:

  1. 如果字符串在第二个/包含任何字母后重定向
  2. 如果第二个/之后的字符串超过7个字符,则重定向
  3. 以下是示例:

    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(不行,重定向)

    请帮我改写重写规则并重写Cond

2 个答案:

答案 0 :(得分:1)

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

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

简单地说,这个正则表达式匹配一组跟随'/'并包含1-7个非字母字符的字符。为了使它只匹配最后一个'/',我附加一个'$',它匹配一行的结尾。

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

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

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

答案 1 :(得分:0)

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

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]