apache 的 rewritecond 无法直接检测浏览器版本号,但可通过正则匹配 user-agent 中 chrome/、version/、firefox/、edg/ 等字段提取主版本,并用多条件组合模拟版本比较以实现降级重定向。

Apache 中 RewriteCond 不能直接检测“浏览器版本号”(比如 Chrome 120 或 Safari 17.5),但可以通过解析 User-Agent 字符串中的版本标识字段,结合正则匹配实现近似判断,并触发降级重定向。关键在于提取可信、稳定、不易伪造的版本片段,避免误判或绕过。
识别常见浏览器及其典型版本格式
浏览器 UA 中的版本信息有固定模式,RewriteCond 可用正则捕获:
-
Chrome:通常含
Chrome/120.0.6099.216—— 匹配Chrome/([0-9]+)即可提取主版本 -
Safari:UA 中同时含
Version/17.5和Safari/605.1.15,优先用Version/([0-9]+\.[0-9]+) -
Firefox:格式为
Firefox/115.0,可用Firefox/([0-9]+) -
Edge:新版 Edge UA 含
Edg/124.0.2478.67,匹配Edg/([0-9]+) -
微信内置浏览器:含
MicroMessenger/8.0.48,注意它复用系统 WebView,版本意义有限
用 RewriteCond 提取并比较版本数字
Apache 不支持算术比较(如 >= 115),但可通过多条件组合模拟“低于某版本”的逻辑。例如拦截旧版 Firefox(
RewriteCond %{HTTP_USER_AGENT} "Firefox/([0-9]{1,3})\." [NC]
RewriteCond %1 <p>说明:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2225" title="Apache 2.4.62"><img
src="https://img.php.cn/upload/manual/001/242/473/6a02be9c282fc407.png" alt="Apache 2.4.62" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2225" title="Apache 2.4.62" class="overflowclass">Apache 2.4.62</a>
<p class="overflowclass">Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2225" title="Apache 2.4.62" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- 第一行用括号捕获主版本号(如
114),存入%1 -
[NV]表示“数值比较”,%1 成立时条件满足 -
[R=302,L]执行临时跳转,避免缓存;生产环境确认后改R=301
规避常见陷阱与增强可靠性
仅靠 UA 版本易被伪造或覆盖,建议叠加验证手段:
-
排除爬虫和自动化工具:加前置条件
RewriteCond %{HTTP_USER_AGENT} !^(.*bot.*|HeadlessChrome) [NC] -
限制匹配范围:避免误伤兼容模式,例如 Safari 的 UA 同时含
Chrome和Version,应优先检查Version/且不含Chrome -
不依赖小版本号:像
Chrome/120.0.6099.216中的6099.216易变且无业务意义,主版本120更稳定 -
微信等 WebView 场景慎用版本:其 UA 版本常滞后于真实内核,更适合用设备 + UA 组合判断(如
iPhone.*MicroMessenger)
实用示例:对 Safari
适配 iOS 15 及以下系统中 Safari 渲染兼容性问题:
RewriteEngine On
# 排除非 Safari 或无 Version 字段的情况
RewriteCond %{HTTP_USER_AGENT} "Safari/" [NC]
RewriteCond %{HTTP_USER_AGENT} "Version/([0-9]+)" [NC]
RewriteCond %1 <p>该配置确保只对明确标识为 Safari 且主版本低于 16 的真实用户生效,同时避免重定向循环。</p>










