Apacheを使用した依存ポータルの実装

Apacheを使用した依存ポータルの実装

私は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ディレクトリに存在する必要があることを強調したいと思います。

また、見ることができますキャプティブポータル検出、ポップアップウィンドウの実装?

おすすめ記事