htaccess重写规则与正则表达式

时间:2015-09-29 19:35:41

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

我很难使用旧网址的一部分为重定向创建重写规则。例如:

旧网址: http://www.example.com/news/index.php/2014/11/07/my-blog-post-from-old-site 要么 http://www.example.com/news/index.php/2014/11/07/my_blog_post_from_old_site

新网址: http://www.example.com/2014/11/07/my-blog-post

从短划线中剥离后,新网址应该只包含永久链接的日期和前三个元素。即使我不确定是否可以使用.htaccess规则完成,但可以肯定可以使用PHP完成。

这是我的.httaccess规则

RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(/?news/index.php/.*/[^/]*?)_([^/]*?_[^/]*)$ $1-$2 [N]
RewriteRule ^(/?news/index.php/.*/[^/]*?)_([^/_]*)$ $1-$2 [R=301]
RewriteRule ^news/index.php/([^/]+)-([^/]+)-(.*)$ http://www.example.com/$1-$2-$3 [L,R=301,NC]

1 个答案:

答案 0 :(得分:2)

只需匹配块,直到遇到连字符(-):

RewriteRule ^news/index\.php/([^-]+-[^-]+-[^-]+).* /$1 [R=301,L,NC]