使用正则表达式访问并重定向到新的URL

时间:2015-09-30 作者:JackTheKnife

我很难使用WP的旧URL的一部分为重定向创建重写规则。示例:

旧URL:

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

新建URL:

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

从破折号中删除后,新URL应该只包含日期和永久链接的前三个元素。如果我将删除部分,并将下划线替换为破折号,则其余部分都会正常工作。

这是我的。httaccess规则

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#replace underscores with dashes
RewriteRule ^(/news/.*/[^/]*?)_([^/]*?_[^/]*)$ $1-$2 [N]
RewriteRule ^(/news/.*/[^/]*?)_([^/_]*)$ $1-$2 [R=301]

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

#WP standard stuff
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

1 个回复
最合适的回答,由SO网友:JackTheKnife 整理而成

发现该解决方案很有用

我认为,用破折号替换下划线是一种昂贵的方法。但这至少在我的测试环境中有效。第一条规则逐个替换破折号。然后,第二条规则从请求的URL中删除前缀。

RewriteBase /

# replace underscores with dashes 
RewriteRule (.+?)_(.+) $1-$2 [R=302,L]

# strip "news/index.php"
RewriteRule ^news/index.php/(.*) /$1 [R=302,L]

相关推荐

Redirect undesirable domain

我有一个wordpress网站,我想运行两个不同域的主机。站点位于域example1的第一个主机中。com工作正常,但在第二个主机域示例2中。com重定向到示例1。com域。中没有设置重定向。htaccess文件。两个域中每个域的DNS都已正确设置。我的问题是我应该如何获得它这是重定向程序代码的哪一部分?