使用 uhttpd 为 GET /generate_204 返回 HTTP 状态 204?

使用 uhttpd 为 GET /generate_204 返回 HTTP 状态 204?

为了处理针对我的特定设置的 Android 强制门户检测,每当我收到 GET 请求时,我都需要返回 HTTP 状态代码 204。/generate_204我目前使用 uhttpd 作为我的网络服务器,因此我想知道是否可以使用此服务器执行此操作。

我目前的理解是:我需要自己编写一个 CGI(或 PHP 或 Lua)脚本,返回类似
Status: 204 No Result

我的问题是如何配置 uhttpd 以将请求转发到/generate_204CGI 或 PHP 或 Lua,因为它没有前缀也没有我可以为此目的匹配的文件扩展名。

答案1

不幸的是,@HBruijn 的聪明想法只是简单地创建/generate_204一个目录而不是一个文件,然后将其用作 ,其中cgi_prefix有一个-file 作为,但这只起到了部分作用。当我自己从浏览器打开时,它确实按照我的要求执行,但前提是首先返回一个重定向到,而 Android 强制门户检测明确忽略了该重定向。所以,不幸的是,这个解决方案不能解决我的问题。index.cgiindex_page/generate_204/generate_204/

以下是我想出的似乎有效的办法:

根本就没有/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 的想法发挥作用,我现在将这个问题保留开放状态,因为我更喜欢这样。

相关内容