需编写.htaccess重写规则以实现向WordPress的平滑迁移
解决旧URL到WordPress新链接的重定向方案
没问题,这是你需要的完整.htaccess配置,我已经把旧URL的重定向规则整合到WordPress默认重写规则的最前面(重写规则是按顺序匹配执行的,必须优先处理旧链接的跳转请求):
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 处理旧URL重定向:http://www.example.com/index.php?action=show&id=4577 → http://www.example.com/archives/4577 RewriteCond %{QUERY_STRING} ^action=show&id=(\d+)$ RewriteRule ^index\.php$ /archives/%1? [R=301,L] # WordPress原有重写规则,保持不变 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
关键部分解释:
RewriteCond %{QUERY_STRING} ^action=show&id=(\d+)$:精准匹配查询字符串为action=show&id=数字的请求,(\d+)是捕获组,用来提取ID数值。RewriteRule ^index\.php$ /archives/%1? [R=301,L]:%1引用前面捕获组提取的ID数字,拼接成新的/archives/xxx路径;- 末尾的
?用来清空原查询字符串,避免跳转后URL带多余的?action=show&id=xxx; R=301代表永久重定向,对搜索引擎SEO友好;L表示这是当前匹配的最后一条规则,匹配成功后不再执行后续规则。
- 原有WordPress规则完全保留,确保WP自身的链接重写功能不受任何影响。
注意事项:
- 确认服务器已启用
mod_rewrite模块; - 如果WordPress安装在子目录,需要调整
RewriteBase的值(比如子目录是blog,就改成RewriteBase /blog/); - 测试阶段可以先用
R=302临时重定向,确认跳转正常后再改成301永久重定向。
内容的提问来源于stack exchange,提问作者Giuseppe Donato
相关产品推荐
相关产品推荐

