帮助Regex匹配和重写URI

时间:2010-07-05 19:19:29

标签: regex url .htaccess

我需要有一个基于子域名“blog”匹配这样的URI的RegEx -

http://blog.foo.com/2010/06/25/city-tax-sale/

并像这样重定向(摆脱子域名和数字/日期) -

http://foo.com/city-tax-sale/

最后一位“城市税收销售”将是一个通配符。所以基本上任何以'blog.foo.com'开头的传入URI都会被重定向到'foo.com'+'在带有数字的三个子路径之后的上述URI的末尾。

我希望这是有道理的。只是尝试创建一个重定向而不是编写每个重定向。

3 个答案:

答案 0 :(得分:3)

这将明确匹配您的日期格式,而不是任何数字和斜线序列:

RewriteCond %{HTTP_HOST} ^blog\.foo\.com$ [NC]
RewriteRule ^/\d{4}/\d{2}/\d{2}/(.*)$ http://foo.com/$1 [L,R=301]

正则表达式部分可以被破坏:

^      # start of non-domain url
/\d{4} # slash followed by 4 digits
/\d{2} # slash followed by 2 digits
/\d{2} # slash followed by 2 digits
/      # closing slash
(.*)   # rest of the url, captured to group 1
$      # end of url

替换为1组中的$1

在选项部分:
L代表“最后” - 告诉它不要费心查看其他规则 R=301用于具有301标头的重定向,这意味着永久重定向(仅R将发送临时302标头)

RewriteCond位对HTTP_HOST标题(由用户/客户端提供)执行不区分大小写(NC选项)检查,如果它启动blog.foo.com则执行重写,否则不执行重写

答案 1 :(得分:2)

RewriteCond %{HTTP_HOST} ^blog.foo.com [NC] 
RewriteRule ^(\d+/)+(.*)/?$ http://foo.com/$2 [L,R=301]

答案 2 :(得分:0)

你可以试试这个:

/http:\/\/blog\..*\.[a-zA-Z]{2,5}\/[0-9]{4}\/[0-9]{2}\/[0-9]{2}\/(.*)\//