Назад | Перейти на главную страницу

Возврат HTTP-статуса 204 для GET / generate_204 с использованием uhttpd?

Чтобы иметь дело с обнаружением адаптивного портала 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 работать, я пока оставлю вопрос открытым, так как я бы предпочел это.