Portal cativo usando o Apache

4

Eu tenho tentado criar um portal cativo no Apache que eu planejo ter o conhecimento da Apple CNA.

Encontrei vários posts relevantes no StackOverflow, incluindo pop-ups do portal Captive ... e Como criar a página de login do popup WiFi .

Eu defini a configuração relevante do Apache como:

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

Não está funcionando direito, pois o navegador CNA entra em um loop de redirecionamento.

Eu também tentei colocar todas as minhas páginas relevantes em um diretório / captive e definir a regra

RewriteRule !^captive($|/) http://192.168.2.1/captive/portal.html [L,R=302]

Mas teve problemas de loop semelhantes. O que fazer?

    
por Rui F Ribeiro 15.08.2017 / 19:28

1 resposta

4

Após investigar e fazer alguns testes, é evidente que o Apple CNA é um navegador da Web próprio; evidentemente, se uma exceção não for feita corretamente, todas as solicitações subsequentes terão novamente o mesmo agente do usuário. Então, ele irá iniciar o procedimento / redirecionamento do portal a partir do zero, assim, os loops de redirecionamento.

Portanto, na regra da Apple, não redirecionaremos mais se o host de destino for o servidor de portal cativo.

# 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

Também adicionamos aqui uma regra genérica, que se nenhuma das condições anteriores acontecer, ou se estivermos lidando com um sistema operacional para o qual não temos uma regra, ela será redirecionada para o portal se não for já existe (por exemplo, não visitar o diretório cativo).

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/captive/ [NC]
RewriteRule ^(.*)$ http://192.168.2.1/captive/portal.html [L]

Obviamente, gostaria de salientar que, com essa configuração, todos os arquivos específicos do portal cativo precisam estar abaixo do diretório / captive.

Veja também Detecção de portal cativo, implementação de popup?

    
por 15.08.2017 / 19:28