.htaccess实现旧域名仅文章重定向至新域名(排除首页及分类)
解决WordPress旧域名仅文章页面重定向到新域名的问题
我明白你现在的需求:要把旧域名下的仅文章页面(排除首页和指定的10个分类页面)301永久重定向到新域名,之前试了几种规则都没达到预期效果,我给你一套完整的可直接用的.htaccess方案,保证精准生效。
核心思路
我们需要在WordPress默认的重写规则之前,添加自定义的重定向规则:
- 先匹配旧域名的请求
- 排除首页(空请求或根路径
/) - 排除你指定的10个分类页面
- 排除静态资源(图片、CSS、JS等)和后台管理页面
wp-admin - 最后把符合条件的文章页面重定向到新域名的对应路径
完整的.htaccess代码
把下面的代码放在WordPress默认的# BEGIN WordPress注释之前,替换掉你自己的旧域名、新域名和分类路径:
# 自定义重定向规则:仅旧域名文章页面重定向到新域名 RewriteEngine On # 匹配旧域名(带www或不带www都生效) RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.bg$ [NC] # 排除首页(空请求或根路径) RewriteCond %{REQUEST_URI} !^/$ [NC] # 排除指定的10个分类页面(替换成你实际的分类路径,每个分类用OR逻辑的独立规则连接) RewriteCond %{REQUEST_URI} !^/categoryfirst/?$ [NC] RewriteCond %{REQUEST_URI} !^/categorysecond/?$ [NC] RewriteCond %{REQUEST_URI} !^/categorythird/?$ [NC] # 继续添加剩下的7个分类,格式和上面一致 # RewriteCond %{REQUEST_URI} !^/your-category-4/?$ [NC] # ...以此类推到第10个分类 # 排除静态资源(避免图片、CSS等也被重定向) RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif|ico|css|js|svg|pdf)$ [NC] # 排除后台管理页面 RewriteCond %{REQUEST_URI} !^/wp-admin/?$ [NC] RewriteCond %{REQUEST_URI} !^/wp-login\.php$ [NC] # 执行301重定向到新域名 RewriteRule ^(.*)$ https://newdomain.bg/$1 [L,R=301] # WordPress默认重写规则(不要修改下面的内容) # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
关键规则说明
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.bg$ [NC]:匹配旧域名,[NC]表示不区分大小写,不管用户输olddomain.bg还是www.olddomain.bg都生效。RewriteCond %{REQUEST_URI} !^/$ [NC]:排除首页,!表示“不匹配”,^/$就是根路径。- 分类排除规则:
!^/categoryfirst/?$中的/?表示分类路径带不带末尾的斜杠都排除,确保不管用户访问/categoryfirst还是/categoryfirst/都不会被重定向。 - 静态资源排除:避免图片、样式表等静态文件被错误重定向,保证网站资源正常加载。
[L,R=301]:L表示这是最后一条规则,匹配后不再执行后续规则;R=301表示永久重定向,对SEO友好。
测试建议
- 保存
.htaccess后,先清除浏览器缓存(或者用隐私窗口测试)。 - 访问旧域名的文章页面,检查是否跳转到新域名的对应页面,状态码为301。
- 访问首页、分类页面,确认不会被重定向。
如果还有问题,可以检查你的分类路径是否完全匹配,或者服务器是否开启了mod_rewrite模块(WordPress正常运行的话一般是开启的)。
内容的提问来源于stack exchange,提问作者bloodstriker
相关产品推荐
相关产品推荐

