Apache通过mod_rewrite识别User-Agent实现移动端自适应跳转,需准确编写规则、避免循环重定向、兼顾SEO与用户体验,并支持桌面端返回及手动切换。

Apache 通过 URL 重写实现移动端自适应跳转,核心是利用 mod_rewrite 模块识别用户设备类型(主要是 User-Agent),再将请求重定向到对应版本的 URL(如 m.example.com 或 example.com/m/)。关键在于规则编写准确、避免循环跳转、兼顾 SEO 和用户体验。
检测移动端 User-Agent 并设置重写条件
Apache 不自带设备识别能力,需手动匹配常见移动终端标识。推荐使用 RewriteCond 判断 %{HTTP_USER_AGENT} 是否包含典型关键词(如 Mobile、Android、iPhone、iPad、BlackBerry、Opera Mini 等),注意大小写不敏感匹配:
- 用
[NC]标志确保忽略大小写 - 用
[OR]连接多个条件,或组合成单个正则提高可读性 - 建议排除平板(如 iPad)单独处理,避免误判为手机;若需区分,可先匹配 iPad 再排除
设定跳转目标与避免重定向循环
跳转逻辑必须防止无限重定向(例如:手机访问 www → 跳 m. → m. 又跳回 www)。常用做法是只对非移动端子域或路径做跳转,并在目标站点中明确标识“已适配”:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 对主站
www.example.com或example.com的请求,若匹配移动端且当前不是m.example.com,才执行跳转 - 在
m.example.com的配置中添加条件:RewriteCond %{HTTP_HOST} !^m\.example\.com$ [NC],确保不重复跳转 - 使用
R=302先测试,确认无误后再改为R=301(永久跳转)
支持桌面端返回与用户手动切换
不能强制所有移动端用户停留于移动页——应允许用户主动返回桌面版。可通过 URL 参数(如 ?desktop=1)或 Cookie 控制:
- 在重写规则前检查是否存在
desktop=1参数,存在则跳过移动端重定向 - 也可用
RewriteCond %{QUERY_STRING} !desktop=1实现 - 桌面版页面提供“手机版”入口,移动端页面提供“电脑版”链接,链接带
?desktop=1即可绕过自动跳转
部署位置与启用要求
规则应写在站点级配置(VirtualHost)或根目录下的 .htaccess 文件中,前提是服务器已启用 mod_rewrite 且允许 AllowOverride All:
- 确认 Apache 已加载 rewrite 模块:
a2enmod rewrite(Debian/Ubuntu)或检查httpd.conf中LoadModule rewrite_module是否启用 - 在
.htaccess中开头添加RewriteEngine On - 生产环境建议把规则移到
VirtualHost配置中,性能更好、更易维护

















