HTAccess指定URL重定向至新域名页面,其余跳转至根目录问题
解决旧域名特定URL重定向问题
嘿,我来帮你搞定这个重定向的麻烦~ 你现在遇到的问题是因为配置里混用了两种不同的Apache重定向模块指令,而且规则顺序不对,导致特定页面的重写被全局规则覆盖了。
问题根源分析
你当前的配置里同时用了mod_alias的Redirect指令和mod_rewrite的规则,还中途关闭了RewriteEngine,这会让Apache的处理逻辑混乱:要么特定页面的Redirect被后面的全局RewriteRule覆盖,要么因为RewriteEngine关闭,后面的规则根本没生效。而且两种模块的执行优先级不同,混用很容易出问题。
修复后的配置方案
统一用mod_rewrite来处理所有重定向,把特定页面的规则放在最前面,确保它先被匹配执行:
RewriteEngine On # 优先处理特定URL的重定向:旧域名/travel/ferry.html → 新域名/ferry/ RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC] RewriteRule ^travel/ferry\.html$ http://www.new-domain.com/ferry/ [R=301,L] # 其余所有URL统一跳转到新域名根目录 RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC] RewriteRule ^ http://www.new-domain.com/? [R=301,L]
配置说明
- 规则顺序很重要:特定页面的规则放在最前面,加上
L标志(Last),表示匹配到这条规则后就停止后续规则的执行,不会被后面的全局规则覆盖。 - 统一用mod_rewrite:避免
mod_alias和mod_rewrite的指令冲突,确保逻辑一致。 - 限定旧域名:通过
RewriteCond只对旧域名生效,不会影响新域名的正常访问。
测试注意事项
- 测试前一定要清除浏览器缓存,因为301是永久重定向,浏览器会缓存旧的跳转记录,可能导致新配置不生效。
- 确认你的Apache服务器已经启用了
mod_rewrite模块(可以通过a2enmod rewrite命令开启,然后重启Apache)。
内容的提问来源于stack exchange,提问作者Barton
相关产品推荐
相关产品推荐

