You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何阻止除Chromium版Edge外的所有IE及旧版Microsoft Edge访问站点

解决思路与代码修改

首先得明确不同浏览器的User-Agent特征,这是精准拦截的关键:

  • IE浏览器:IE10及更早版本带MSIE标识,IE11则用Trident/标识(UA里可能没有MSIE)
  • 旧版Edge(EdgeHTML内核):UA里包含Edge/(大写E结尾)
  • Chromium版Edge:UA里是Edg/(小写g结尾),同时通常会附带Chrome的标识

你现有代码已经能拦截IE,但没区分新旧Edge。我把逻辑调整得更清晰,确保只拦截目标浏览器,同时放行Chromium版Edge:

<?php
$userAgent = $_SERVER['HTTP_USER_AGENT'];

// 先判断是否是Chromium版Edge,直接放行
if (preg_match('/Edg\/\d+/i', $userAgent)) {
    // 显示登录表单
    echo "登录表单内容";
} 
// 拦截IE或旧版Edge
elseif (preg_match('/(?i)(MSIE \d+)|(Trident\/\d+)|(Edge\/\d+)/', $userAgent)) {
    // 显示错误提示
    echo "抱歉,您的浏览器版本过低,请使用Chromium版Edge或其他现代浏览器访问本站";
} 
// 其他现代浏览器放行
else {
    // 显示登录表单
    echo "登录表单内容";
}
?>

代码说明

  1. 优先判断Chromium版Edge:因为它的UA特征是Edg/(小写g),用/Edg\/\d+/i忽略大小写匹配版本号,确保不会误判。
  2. 拦截规则:同时匹配IE的两种标识(MSIETrident/),加上旧版Edge的Edge/标识,覆盖所有需要拦截的浏览器。
  3. 可读性优先:分开判断比写复杂的复合正则更直观,后续维护也更方便。

另外补充一点:User-Agent是可以被用户伪造的,这种方法适合普通场景的拦截,如果需要更严谨的检测,可以结合浏览器特性检测(比如检测是否支持现代JS API),但对于大多数需求来说,UA匹配已经足够。

内容的提问来源于stack exchange,提问作者Rocstar

火山引擎 最新活动