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

ppp*_*dox 12 local-area-network captive-portal

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

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

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

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


安卓 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:?


视窗手机

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


视窗 7\8\10

  • Apache:参见 windows phone(适用于 win7)。
  • nginx:?

苹果系统

  • 阿帕奇:?
  • nginx:?

亚马逊 Kindle - 它有弹出窗口吗?

  • 阿帕奇:?
  • nginx:?

小智 7

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

机制是这样的:

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

此外,对于 iOS,您需要为您的 WiFi 网络创建一个域,因为它假定没有访问权限的无域网络是家庭网络,并将其标记为 No Network 而不是 Captive Portal。

只需确保使用 HTTP Success 将以下 URL 显式重定向到您的强制门户:

安卓/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 方法并且它一直工作正常。