如何用.htaccess规则将/blog/子目录永久迁移至新域名并保留URL路径
实现旧域名/blog/子目录到新域名的永久重定向(保留路径)
没问题,这个需求完全可以通过Apache的.htaccess规则实现,而且能完美兼顾SEO(用301永久重定向)和WordPress的现有规则,不会产生冲突。
核心思路
使用301永久重定向(这是搜索引擎认可的站点迁移方式,能最大程度保留原有排名),匹配旧域名下所有以/blog/开头的请求,将/blog/之后的完整路径无缝转移到新域名。
具体.htaccess规则
把下面的代码添加到你的.htaccess文件最顶部(一定要放在WordPress默认规则的前面,Apache是从上到下执行规则的):
# 永久重定向旧域名/blog/下的内容到新域名,保留路径 RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteCond %{REQUEST_URI} ^/blog/ [NC] RewriteRule ^blog/(.*)$ https://www.newdomain.com/$1 [R=301,L,NE]
规则解释
RewriteEngine On:开启URL重写功能(如果你的文件里已经有这一行,就不用重复加了)RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]:匹配旧域名([NC]表示不区分大小写),把www.example.com替换成你的实际旧域名RewriteCond %{REQUEST_URI} ^/blog/ [NC]:匹配所有以/blog/开头的请求路径RewriteRule ^blog/(.*)$ https://www.newdomain.com/$1 [R=301,L,NE]:^blog/(.*)$:捕获/blog/之后的所有内容(比如2018/05/07/article1)https://www.newdomain.com/$1:把捕获的内容拼接到新域名后面,形成目标URL[R=301]:指定这是永久重定向,告诉搜索引擎更新索引[L]:表示这是最后一条规则,匹配后不再执行后续规则[NE]:防止特殊字符被转义,保证路径中的特殊符号(比如?、&)正常传递
关键注意事项
- 放置位置:必须把这段规则放在WordPress自动生成的
# BEGIN WordPress和# END WordPress注释块的外面,而且要在这些WordPress规则的上方。这样Apache会先处理重定向请求,再处理WordPress的内部重写,不会干扰现有站点的其他功能。 - 域名替换:务必把规则中的
www.example.com和www.newdomain.com替换成你实际的旧域名和新域名。如果旧域名同时有非www版本(比如example.com),可以再加一条匹配规则:RewriteCond %{HTTP_HOST} ^example\.com$ [NC] - 验证重定向:设置完成后,你可以用浏览器访问旧的/blog/路径,检查是否跳转到了新域名的对应路径,同时用开发者工具(F12)查看网络请求的状态码是否为
301 Moved Permanently。
这样设置后,既完成了内容的永久迁移,又不会影响原WordPress站点的其他功能,也能保证SEO排名的平稳过渡。
内容的提问来源于stack exchange,提问作者Fabio Marzocca
相关产品推荐
相关产品推荐

