强制门户弹出窗口:权威指南

强制门户弹出窗口:权威指南

我正在手动实施 WiFi 强制门户。一切工作正常,但有一个小问题:我希望每个人都能看到他们的移动操作系统(或计算机操作系统)强制门户弹出窗口,以获得完美的体验。

由于他们每个人都有自己扭曲的做法,我似乎无法获得一致的跨平台体验。

为了实现这一点,您能否帮助我描述一下(1)WiFi 客户端的哪些 URL 请求需要重定向到登录页面,以及/或(2)可以使用哪些 nginx 或 apache Web 服务器配置将 WiFi 客户端重定向到登录页面?

本例中的强制门户登录页面是http://captiveportal.lan。以下是我正在尝试解决此问题的一些操作系统。


Android 4/5/6

  • 阿帕奇:
    RedirectMatch 302 /generate_204 http://captiveportal.lan
  • nginx: ?

以前的 Android 版本

  • 阿帕奇:?
  • nginx: ?

iOS 8

  • Apache .htaccess:
    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} ^CaptiveNetworkSupport(.*)$ [NC]
    RewriteRule ^(.*)$ http://captiveportal.lan [L,R=302]

  • nginx: ?

以前的 iOS 版本

  • 阿帕奇:?
  • nginx: ?


Windows 手机

  • 阿帕奇:
    RedirectMatch 302 /ncsi.txt http://captiveportal.lan
  • nginx: ?


Windows 7\8\10

  • Apache:参见 Windows Phone(适用于 Win7)。
  • nginx: ?

苹果系统

  • 阿帕奇:?
  • nginx: ?

Amazon Kindle - 它有弹出窗口吗?

  • 阿帕奇:?
  • nginx: ?

答案1

所有移动操作系统只需检查网页即可确定其是否位于强制门户之后。

机制如下:

  1. 获取/发布http://foo.com/bar.html
  2. 如果 bar.html == [预期内容] > 打开 Internet
  3. 如果 bar.html != [预期内容] > 强制门户
  4. 如果 bar.html[status] != SUCCESS > 无网络

此外,对于 iOS,您需要为您的 WiFi 网络设置一个域,因为它假定没有访问权限的无域网络是家庭网络,并将其标记为无网络而不是强制门户。

只需确保使用 HTTP 成功明确将以下 URL 重定向到您的强制门户:

Android/Chromebook:

  • clients3.google.com

iOS 6:

  • gsp1.apple.com
  • *.akamaitechnologies.com

IOS 7:

  • www.appleiphonecell.com
  • www.airport.us
  • *.apple.com.edgekey.net
  • *.akamaiedge.net
  • *.akamaitechnologies.com

iOS 8/9:

视窗

  • ipv6.msftncsi.com
  • www.msftncsi.com

许多供应商也开始使用用户代理“CaptiveNetworkSupport”,尽管它不像上面的 URL 方法那么常见。只需检查该 UA 并始终为其提供您的门户页面...但并非 100% 有效。

我使用 URL 方法并且效果很好。

答案2

亚马逊 Kindle(Fire)

Amazon Kindle(Fire)发出以下请求,如果无法检索“...它会假定用户必须登录并显示登录屏幕。”:

iOS 8.4

对于最新的 iOS,我必须匹配所有 URI 才能请求http://captive.apple.com- 不仅仅是“/hotspot-detect.html”。

iOS 8.4 客户端使用随机生成的 URI(例如“/xmqPyZUv/3r8jTjv8.html”和“/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BGbw7iYU2DVBh1/sVBlx8icYzTTtE.html”)在以下域的 URL 请求中发出请求,以检测强制门户:

相关内容