.htaccess重定向排除指定页面遇LiteSpeed 404问题求助
解决LiteSpeed服务器上.htaccess排除页面404问题(旧域名重定向场景)
问题背景
需要将旧域名所有URL 301重定向到新域名,但排除/contact-form和/about两个页面。本地Apache环境测试配置正常,但部署到LiteSpeed服务器后,被排除的页面出现404错误。
核心原因
LiteSpeed与Apache在Rewrite规则的解析逻辑上存在细微差异,主要体现在:
- 对
RewriteRule的L标志处理优先级不同,Apache下终止后续规则的逻辑在LiteSpeed下需要更明确的匹配 - 冗余的
RewriteCond可能导致规则匹配冲突,LiteSpeed对条件的顺序敏感度更高
修正后的.htaccess配置
将以下配置放在WordPress规则块之前,替换原有的重定向规则:
RewriteEngine On # 匹配旧域名(替换为实际旧域名) RewriteCond %{HTTP_HOST} ^(?:www\.)?olddomain\.com$ [NC] # 排除指定页面及其子路径,终止后续重定向规则 RewriteRule ^(contact-form|about)($|.*) - [L,NC] # 排除静态资源,避免样式、脚本等被重定向 RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|gif|webp|ico)$ [NC] # 剩余所有请求重定向到新域名 RewriteRule ^(.*)$ https://newdomain.com/$1 [R=301,L] # 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
配置说明
- 合并排除规则:用
^(contact-form|about)($|.*)同时匹配页面本身(如/contact-form)和子路径(如/contact-form/subpage),[L,NC]确保不区分大小写且直接终止后续重定向规则,这在LiteSpeed下比多条RewriteCond更可靠。 - 简化静态资源排除:将重复的静态资源条件合并为一条,减少规则冗余。
- 规则顺序:确保重定向和排除规则在WordPress规则之前执行,避免WP的路由规则干扰。
LiteSpeed服务器额外检查项
- 确认mod_rewrite启用:部分LiteSpeed主机默认关闭mod_rewrite,需在主机控制面板或联系服务商开启。
- 清除服务器缓存:LiteSpeed会缓存Rewrite规则和页面内容,修改.htaccess后必须清除服务器缓存才能生效。
- 验证旧站点页面存在:排除后的页面会走旧站点的WordPress路由,需确保旧域名站点上确实存在
/contact-form和/about页面,否则仍会出现404。
内容的提问来源于stack exchange,提问作者Vanda Nojan - وندا نوژن
相关产品推荐
相关产品推荐

