网站迁移URL重写规则求助:A站与B站URL结构不一致
解决方案:Website A 到 Website B 的 URL 重写规则
首先明确核心限制:.htaccess 的重写规则只能基于当前 URL 的字面内容做匹配,无法自动获取每个文章对应的分类信息(分类数据存储在 Website B 的数据库中),需根据实际场景选择方案:
场景1:所有文章归属同一个固定分类
如果 Website A 的全部文章在 Website B 中都属于同一个分类(比如 blog),可使用如下规则:
RewriteEngine On # 处理不带 www 的 websiteA.de 跳转 RewriteCond %{HTTP_HOST} ^websiteA\.de$ [NC] RewriteRule ^([^/]+)/?$ https://www.websiteB.de/固定分类名/$1/ [R=301,L] # 处理带 www 的 websiteA.de 跳转 RewriteCond %{HTTP_HOST} ^www\.websiteA\.de$ [NC] RewriteRule ^([^/]+)/?$ https://www.websiteB.de/固定分类名/$1/ [R=301,L]
将代码中的固定分类名替换为实际分类标识(如 news、articles),规则里的[^/]+匹配文章名部分,/?兼容 URL 末尾带或不带斜杠的情况。
场景2:文章分属不同分类,需手动映射
若不同文章对应不同分类,只能为每个文章单独编写重写规则:
RewriteEngine On # 单独文章的跳转规则(需放在全局规则之前) RewriteCond %{HTTP_HOST} ^(www\.)?websiteA\.de$ [NC] RewriteRule ^article-name-1/?$ https://www.websiteB.de/category1/article-name-1/ [R=301,L] RewriteCond %{HTTP_HOST} ^(www\.)?websiteA\.de$ [NC] RewriteRule ^article-name-2/?$ https://www.websiteB.de/category2/article-name-2/ [R=301,L] # 全局兜底规则(未匹配到单独规则的请求走默认分类) RewriteCond %{HTTP_HOST} ^(www\.)?websiteA\.de$ [NC] RewriteRule ^(.*)$ https://www.websiteB.de/默认分类/$1/ [R=301,L]
注意:单独文章的规则必须放在全局规则之前,保证优先匹配特定文章,未匹配的请求再走默认分类跳转。
额外注意事项
- 测试阶段建议用
R=302临时重定向,避免浏览器缓存永久重定向规则影响调试;正式迁移再改为R=301。 - 正则中域名的点需用
\.转义,否则会匹配任意字符导致规则失效。 - 若需映射的文章数量较多,手动编写规则效率极低,建议在 Website B 的后端(如 WordPress 的
functions.php)编写路由逻辑,通过查询数据库获取文章对应分类后跳转,灵活性更高。
内容的提问来源于stack exchange,提问作者Sascha309
相关产品推荐
相关产品推荐

