Чтобы иметь дело с обнаружением адаптивного портала Android для моей конкретной настройки, мне нужно возвращать код состояния HTTP 204 всякий раз, когда я получаю запрос GET для /generate_204
. В настоящее время я использую uhttpd в качестве своего веб-сервера, поэтому мне интересно, можно ли это сделать с этим сервером.
Мое текущее понимание: мне нужно написать сценарий CGI (или PHP, или Lua), который возвращает что-то вроде
Status: 204 No Result
У меня есть вопрос, как я могу настроить uhttpd для пересылки запросов на /generate_204
в CGI, PHP или Lua, поскольку у них нет ни префикса, ни расширения файла, которые я мог бы сопоставить для этой цели.
К сожалению, у @HBruijn довольно умная идея просто сделать /generate_204
каталог, а не файл, а затем использовать его как cgi_prefix
с index.cgi
-файл внутри него как index_page
, работает только частично. Когда я открываю /generate_204
из самого браузера, он делает именно то, что я хотел, но только после первого возврата перенаправления на /generate_204/
, который обнаружение адаптивного портала Android явно игнорирует. Итак, к сожалению, это решение не решает мою проблему.
Вот хитрость, которую я придумал, похоже, работает:
Просто нет /generate_204
файл вообще и вместо этого создайте CGI-скрипт в cgi-bin
который обрабатывает все ошибочные запросы, которые выглядят следующим образом:
#!/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
Затем просто добавьте следующее к /etc/config/uhttpd
:
option error_page /cgi-bin/error.cgi
option cgi_prefix /cgi-bin
list interpreter ".cgi=/bin/ash"
(изменение имен файлов и папок по мере необходимости)
Это определенно не самое чистое решение, и в случае, если есть способ предотвратить перенаправление и заставить идею @HBruijn работать, я пока оставлю вопрос открытым, так как я бы предпочел это.