.htaccess配置旧域名301跳转新域名不生效问题求助
问题原因
你的重定向规则不生效有三个核心问题:
- 规则语法错误:你添加的
RewriteRule (.*)https://accidentallydutch.com/$1 [L,R=301]缺少匹配规则和目标URL之间的分隔空格,Apache无法解析该指令,因此既不会执行跳转也不会抛出报错。 - 触发条件限制:原有两段HTTPS跳转规则都绑定了「仅HTTPS关闭时触发」的判断条件,当用户通过HTTPS访问旧域名时,跳转逻辑完全不会执行。
- 优先级冲突:重复的
RewriteEngine指令、分散的跳转块会被后续WordPress默认路由规则覆盖优先级,跳转逻辑会被直接跳过。
修复方案
- 删除文件中两段冗余的旧HTTPS插件生成的跳转块(即标注
BEGIN HTTPS Forced Redirect和BEGIN Really Simple SSL Redirect 5.3.0的两段重复代码),避免规则冲突。 - 将统一的域名跳转+HTTPS强制规则放在文件最顶部(位于WordPress默认规则之前,不要放在WordPress自动生成的标记区间内,避免被WordPress自动覆盖)。
- 替换完成后的完整.htaccess配置如下:
<IfModule mod_rewrite.c> RewriteEngine On # 匹配所有访问旧域名(含www/非www、HTTP/HTTPS)的请求 RewriteCond %{HTTP_HOST} ^(www\.)?invadingholland\.com$ [NC] # 排除SSL证书验证路径,避免证书申请/续期失败 RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/ # 301永久跳转到新域名对应路径 RewriteRule ^(.*)$ https://accidentallydutch.com/$1 [L,R=301] </IfModule> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
验证注意事项
- 测试阶段先将规则中的
R=301改为R=302(临时跳转),避免301永久跳转的强缓存特性导致浏览器缓存错误规则,确认所有文章、页面路径跳转正常后再改回R=301。 - 配置修改后先清空浏览器缓存再测试,或使用浏览器无痕模式验证,排除缓存干扰。
- 确认旧域名所在服务器已开启Apache mod_rewrite模块,且站点目录配置允许.htaccess生效(
AllowOverride All),否则规则不会被服务器读取执行。
内容的提问来源于stack exchange,提问作者Stuart B
相关产品推荐
相关产品推荐

