私はApacheで依存ポータルを構築しようとしており、Apple CNAについて学ぶ予定です。
StackOverflowで、以下を含むいくつかの関連記事を見つけました。依存ポータルポップアップ...そしてWiFiポップアップログインページを作成する方法。
関連するApache設定を次のように定義しました。
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^CaptiveNetworkSupport(.*)$ [NC]
RewriteRule ^(.*)$ http://192.168.2.1/captive/portal.html [L,R=302]
# android
RedirectMatch 302 /generate_204 http://192.168.2.1/captive/portal.html
# windows
RedirectMatch 302 /ncsi.txt http://192.168.2.1/captive/portal.html
CNAブラウザがリダイレクトループに入り、正しく機能しません。
また、関連するすべてのページを/ captiveディレクトリに配置し、ルールを定義してみました。
RewriteRule !^captive($|/) http://192.168.2.1/captive/portal.html [L,R=302]
しかし、同様の屋根ふきの問題があります。何をすべきか?
答え1
調査といくつかのテストの後、Apple CNAが独自のWebブラウザであることが明らかになりました。例外が正しく作成されない場合、後続のすべての要求に同じユーザーエージェントが再適用されます。したがって、最初からプログラム/ポータルリダイレクトを開始してループをリダイレクトします。
そのため、Appleのルールに基づいてリダイレクトされなくなります。もしターゲットホストは依存ポータルサーバーです。
# apple
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^CaptiveNetworkSupport(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^192.168.2.1$
RewriteRule ^(.*)$ http://192.168.2.1/captive/portal.html [L,R=302]
# android
RedirectMatch 302 /generate_204 http://192.168.2.1/captive/portal.html
# windows
RedirectMatch 302 /ncsi.txt http://192.168.2.1/captive/portal.html
また、以前の条件がまったく発生しない場合、またはルールのないOSを処理している場合は、ポータルにリダイレクトされる一般的な包括ルールもここに追加しました。まだそこにいないなら(例:必須ディレクトリへのアクセス権はありません)
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/captive/ [NC]
RewriteRule ^(.*)$ http://192.168.2.1/captive/portal.html [L]
明らかに、この構成では、すべての依存ポータル関連ファイルが/ captiveディレクトリに存在する必要があることを強調したいと思います。
また、見ることができますキャプティブポータル検出、ポップアップウィンドウの実装?