最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
实战:Apache mod_rewrite 域名跳转规则设置
时间:2026-07-15 19:27:59 编辑:袖梨 来源:一聚教程网
Apache二级域名跳转需先确保mod_rewrite模块启用、AllowOverride设为All、DNS解析生效;再用RewriteCond匹配转义后的域名,配合RewriteRule实现301跳转并保留路径,[R=301,L]确保永久重定向且终止后续规则。
Apache mod_rewrite 域名跳转不是写几行代码就完事,关键在于匹配条件准确、跳转逻辑清晰、状态码选对,且环境已就绪。下面从真实部署角度,直接讲清楚怎么配、为什么这么配、容易踩哪些坑。
确保 rewrite 模块和权限已启用
很多跳转不生效,根本不是规则写错,而是底层没打开。必须检查三项:
- 运行
httpd -M | grep rewrite或a2enmod rewrite(Debian系),确认rewrite_module已加载; - 在虚拟主机配置或主配置中,对应目录的
<Directory>区块里,AllowOverride必须设为All或至少包含FileInfo; - DNS 已将目标二级域名(如
m.example.com)正确解析到当前服务器 IP,CNAME 或 A 记录均需生效(可用dig m.example.com验证)。
二级域名跳转到主站子路径(常见移动站场景)
比如用户访问 m.example.com/product/123,你想让它 301 跳到 www.example.com/m/product/123,保留路径结构:
RewriteEngine OnRewriteCond %{HTTP_HOST} ^m.example.com$ [NC]RewriteRule ^(.*)$ https://www.example.com/m/$1 [R=301,L]
注意点:
-
^m.example.com$中的点要转义,否则m.examplecom也会被误匹配; -
[R=301,L]表示永久跳转 + 立即终止后续规则,避免与其他重写冲突; - https://),防止跳转后降级为 HTTP。
多域名统一跳转到主域名(品牌归一)
当有 www.example.com、example.com、shop.example.com 多个入口,想全部规范到 https://www.example.com:
RewriteEngine OnRewriteCond %{HTTP_HOST} !^www.example.com$ [NC]RewriteCond %{HTTP_HOST} !^$RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
说明:
- 第一个
RewriteCond排除主域名,第二个排除空 Host(防异常请求); - 用
!否定逻辑比逐个写OR更简洁安全; - $1 保留原始路径,比如
shop.example.com/about→www.example.com/about。
跳转同时强制 HTTPS(安全增强)
如果目标地址是 HTTPS,但用户可能从 HTTP 访问二级域名,可合并判断:
RewriteEngine OnRewriteCond %{HTTP_HOST} ^blog.example.com$ [NC]RewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://blog.example.com/$1 [R=301,L]
这个组合确保:只对 blog.example.com 生效,且仅当当前非 HTTPS 时才跳转。若已是 HTTPS,则跳过该规则,避免循环重定向。
不复杂但容易忽略细节,配完务必用 curl -I http://m.example.com 和 curl -I https://m.example.com 分别测试响应头中的 Location 和状态码是否符合预期。