Infelizmente, a idéia bastante inteligente do HBruijn de simplesmente tornar /generate_204
um diretório em vez de um arquivo e usá-lo como cgi_prefix
com um arquivo index.cgi
dentro dele como index_page
, funciona apenas parcialmente. Quando abro /generate_204
do navegador, ele faz exatamente o que eu queria, mas somente depois de retornar um redirecionamento para /generate_204/
, que a detecção do portal cativo do Android explicitamente ignora. Então, infelizmente essa solução não resolve meu problema.
Aqui está o trabalho de hack que eu criei que parece funcionar:
Simplesmente não use um arquivo /generate_204
e crie um script CGI em cgi-bin
que lida com todas as solicitações incorretas assim:
#!/bin/sh
if [ "$REQUEST_URI" == "/generate_204" ]; then
echo "Status: 204 No Content"
echo ""
exit
fi
echo "Status: 404 Not Found"
echo "Content-Type: text/html"
echo ""
cat /path/to/my/error404.html
Em seguida, basta adicionar o seguinte a /etc/config/uhttpd
:
option error_page /cgi-bin/error.cgi
option cgi_prefix /cgi-bin
list interpreter ".cgi=/bin/ash"
(ajustando os nomes dos arquivos e pastas conforme necessário)
Esta definitivamente não é a solução mais limpa, e caso haja uma maneira de evitar o redirecionamento e fazer a ideia do @ HBruijn funcionar, deixarei a questão em aberto por enquanto, já que eu preferiria muito mais isso.