如何用带负向前瞻的htaccess重定向实现WordPress跳转且保留wp-content资源
完全不需要为每个分类单独配置重定向规则,你最初的方案问题是匹配规则过于宽泛,误命中了需要保留在原站的wp-content、API等系统路径,只需要在规则中增加路径排除逻辑即可实现需求。
Apache 配置方案
你使用的RedirectMatch支持正则负向预查,直接调整规则如下即可:
# 排除所有不需要重定向的系统路径后,匹配分类/文章别名结构跳转 RedirectMatch 301 ^/(?!wp-content|wp-json|wp-admin|wp-includes)([^/]+)/([^/]+)/?$ https://mynewwebsite.com/blog/$2
如果站点开启了mod_rewrite,也可以用更灵活的重写规则实现:
RewriteEngine On # 依次排除需要保留在原站的路径 RewriteCond %{REQUEST_URI} !^/wp-content/ RewriteCond %{REQUEST_URI} !^/wp-json/ RewriteCond %{REQUEST_URI} !^/wp-admin/ RewriteCond %{REQUEST_URI} !^/wp-includes/ # 匹配 分类名/文章别名 结构执行跳转 RewriteRule ^([^/]+)/([^/]+)/?$ https://mynewwebsite.com/blog/$2 [L,R=301]
Nginx 配置方案
如果你的原站用Nginx提供服务,用以下规则即可:
# 优先匹配系统资源路径,保留原站访问逻辑 location ~ ^/(wp-content|wp-json|wp-admin|wp-includes)/ { try_files $uri $uri/ /index.php$is_args$args; } # 匹配分类/文章别名结构,执行301跳转 location ~ ^/([^/]+)/([^/]+)/?$ { return 301 https://mynewwebsite.com/blog/$2; }
注意事项
- 调试阶段建议先把301改成302临时重定向,确认规则匹配逻辑、跳转结果完全符合预期后再改为301永久重定向,避免浏览器缓存错误规则影响正常访问
- 如果你有自定义的API路径、其他需要保留在原站的路径,只需要把对应路径前缀加到排除列表中即可
- 上述规则会自动适配所有分类,无论你有多少个分类都不需要单独新增规则
内容的提问来源于stack exchange,提问作者Kabal
相关产品推荐
相关产品推荐

