web-dev-qa-db-ja.com

uhttpdを使用してGET / generate_204のHTTPステータス204を返しますか?

特定のセットアップでAndroidキャプティブポータルの検出を処理するには、/generate_204のGETリクエストを受け取るたびにHTTPステータスコード204を返す必要があります。現在、uhttpdを使用していますウェブサーバーなので、これがこのサーバーで可能かどうか疑問に思っています。

私の現在の理解:次のようなものを返すCGI(またはPHPまたはLua)スクリプト)を自分で作成する必要があります
Status: 204 No Result

私が持っている質問は、/generate_204へのリクエストをCGIまたはPHPまたはLuaに転送するようにuhttpdを構成する方法です。これには、一致できるプレフィックスもファイル拡張子もありません。この目的のために。

2
Markus A.

残念ながら、@ HBruijnは、単に/generate_204をファイルではなくディレクトリにして、それをcgi_prefixとして使用し、その中にindex.cgi-ファイルをindex_pageとして使用するという非常に巧妙なアイデアです。部分的にしか機能しません。自分でブラウザから/generate_204を開くと、それは私が望んでいたことを正確に実行しますが、最初に/generate_204/にリダイレクトを返した後でのみ、Androidキャプティブポータル検出を明示的にですから、残念ながらこの解決策では私の問題は解決しません。

これが私が思いついたハックジョブで、うまくいくようです。

単に/generate_204ファイルをまったく持たず、代わりにcgi-binに次のようなすべての誤った要求を処理するCGIスクリプトを作成します。

#!/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のアイデアを機能させる方法がある場合は、質問を開いたままにしておきます。

3
Markus A.