俘虏门户popup窗口:权威指南

我正在手动实现一个WiFi强制门户。 我已经有了一切工作,但一个单一的栓:我希望每个人都可以看到他们的移动操作系统(或计算机操作系统)俘虏门户popup无瑕的体验。

因为他们每个人都有自己的扭曲的方式做我似乎无法获得一致的跨平台的经验。

为了做到这一点,我可以有一些帮助来描述(1)来自WiFi客户端的URL请求需要被redirect到login页面,和/或(2)可以使用什么nginx或apache web服务器configuration来redirectWiFi客户端到login页面?

我在这个例子中的俘虏门户login页面是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

  • 阿帕奇:看到Windows Phone(适用于win7)。
  • nginx:?

苹果系统

  • 阿帕奇:?
  • nginx:?

亚马逊的Kindle – 它有一个popup?

  • 阿帕奇:?
  • nginx:?

所有的移动操作系统只是检查一个网页,以决定他们是否在强制门户背后。

其机制是这样的:

  1. GET / POST http://foo.com/bar.html
  2. 如果bar.html == [预期内容]>打开Internet
  3. 如果bar.html!= [预期内容]>强制门户
  4. 如果bar.html [status]!= SUCCESS> No Network

另外,对于iOS,您需要为您的WiFinetworking设置一个域,因为它假定无域的networking是一个家庭networking,并将其标记为无networking而不是圈养门户。

只要确保使用HTTP Success将以下URLredirect到强制门户:

Android / Chromebook:

  • clients3.google.com

iOS 6:

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

IOS 7:

iOS 8/9:

视窗

许多供应商也开始使用用户代理“CaptiveNetworkSupport”,虽然它不像上面的URL方法那么普遍。 只要检查该UA,并始终把它的门户页面…不工作100%,虽然。

我使用URL方法,它工作正常。

亚马逊Kindle(火)

亚马逊的Kindle(火)作出以下要求,如果它不能被检索“…它假定用户必须login并抛出一个login屏幕。”:

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请求到以下域以检测强制门户: