为了处理针对我的特定设置的 Android 强制门户检测,每当我收到 GET 请求时,我都需要返回 HTTP 状态代码 204。/generate_204
我目前使用 uhttpd 作为我的网络服务器,因此我想知道是否可以使用此服务器执行此操作。
我目前的理解是:我需要自己编写一个 CGI(或 PHP 或 Lua)脚本,返回类似Status: 204 No Result
我的问题是如何配置 uhttpd 以将请求转发到/generate_204
CGI 或 PHP 或 Lua,因为它没有前缀也没有我可以为此目的匹配的文件扩展名。
答案1
不幸的是,@HBruijn 的聪明想法只是简单地创建/generate_204
一个目录而不是一个文件,然后将其用作 ,其中cgi_prefix
有一个-file 作为,但这只起到了部分作用。当我自己从浏览器打开时,它确实按照我的要求执行,但前提是首先返回一个重定向到,而 Android 强制门户检测明确忽略了该重定向。所以,不幸的是,这个解决方案不能解决我的问题。index.cgi
index_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 的想法发挥作用,我现在将这个问题保留开放状态,因为我更喜欢这样。