使用正则表达式访问并重定向到新的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] 文章导航