当前位置:首页 > 行业动态 > 正文

htaccess域名跳转

.htaccess域名跳转可通过mod_rewrite模块实现,使用Redirect或RewriteRule指令设置301永久跳转,需确保服务器支持且允许.htaccess配置

htaccess域名跳转详解与实战指南

基础概念与原理

.htaccess是Apache服务器用于配置目录级权限的配置文件,通过修改该文件可以实现URL重写、域名跳转、访问控制等功能,域名跳转主要依赖mod_rewrite模块,需确保服务器已启用该模块(在httpd.conf中取消LoadModule rewrite_module modules/mod_rewrite.so的注释)。

核心语法结构

指令类型 作用说明 示例语法
RewriteEngine On 启用重写引擎 必须放在其他指令之前
RewriteCond 设置重写条件 RewriteCond %{HTTP_HOST} ^olddomain.com$ [NC]
RewriteRule 定义重写规则 RewriteRule ^(.)$ https://newdomain.com/$1 [R=301,L]
状态码标识 跳转类型说明 [R=301]永久跳转
[R=302]临时跳转

常见跳转场景与代码示例

全站永久跳转(含www与非www统一)

RewriteEngine On
# 统一去除www前缀
RewriteCond %{HTTP_HOST} ^www.oldsite.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^oldsite.com$
RewriteRule ^(.)$ https://newsite.com/$1 [R=301,L]

带参数跳转(保留查询字符串)

RewriteCond %{HTTP_HOST} =test.com
RewriteRule ^(.+)$ https://prod.com/$1 [NE,R=302,L,QSD]

注:QSD参数(Query String Append)会自动保留原始参数

HTTPS强制跳转+域名更换

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP_HOST} ^(.).oldtld$ [NC]
RewriteRule ^(.)$ https://%1.newtld/$1 [R=301,L]

301与302跳转对比表

特性 301 Moved Permanently 302 Found
用途 永久域名变更 临时维护跳转
SEO影响 权重完全转移 权重不转移
浏览器缓存 长期缓存 短期缓存
搜索引擎 更新索引数据库 维持原索引
使用场景 公司改名/品牌升级 A/B测试

高级应用技巧

多域名智能跳转

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?:sub1.|sub2.)?olddomain.com$ [NC]
RewriteRule ^(.)$ https://newdomain.com/%1 [R=301,L]

该规则可同时处理olddomain.comsub1.olddomain.comsub2.olddomain.com三种情况

基于User-Agent的跳转

RewriteCond %{HTTP_USER_AGENT} !(Mozilla|Chrome) [NC]
RewriteRule ^mobile/(.)$ https://m.newsite.com/$1 [R=302,L]

实现非移动设备访问特定路径时的跳转

安全注意事项

  1. 防止开放重定向破绽:必须明确指定目标域名,避免使用[R=301]配合动态参数

    RewriteRule ^(.+)$ http://$1 [R,L] # 危险!可被利用进行钓鱼攻击
  2. 大小写敏感处理:Windows服务器不区分大小写,Linux服务器需注意[NC]标志

    RewriteCond %{HTTP_HOST} ^OLDDOMAIN.COM$ # Linux环境需加[NC]
  3. 循环重定向检测:新旧域名配置需互斥,避免A跳B同时B跳A形成死循环

调试与验证方法

工具 功能说明
curl -I 查看HTTP响应头中的Location字段
Browser DevTools 检查Network面板的重定向链
htaccess tester 在线工具验证语法正确性
Web服务器日志 查看重定向请求记录(推荐开启LogLevel)

FAQs常见问题解答

Q1:如何测试.htaccess跳转规则是否生效?
A1:可通过以下步骤验证:

  1. 清除浏览器缓存或使用隐身模式
  2. 访问原始URL(如http://oldsite.com/test)
  3. 使用命令行执行curl -I http://oldsite.com/test查看响应头
  4. 检查返回状态码应为301/302,且Location字段指向新地址
  5. 确认跳转后URL参数/路径是否正确保留

Q2:子目录迁移时如何保持路径结构?
A2:需使用捕获组保留路径信息,示例:

RewriteCond %{HTTP_HOST} =example.com
RewriteRule ^blog/(.)$ https://newdomain.com/articles/$1 [R=301,L]

此规则将example.com/blog/post-1永久跳转到newdomain.com/articles/post-1,既完成域名切换又保持

0