CGI スクリプトを表示しない標準的な方法は何ですか?

CGI スクリプトを表示しない標準的な方法は何ですか?

Apache の modを使用して CGI ディレクトリを設定しましたuserdir。ラップトップ上の他のユーザーにも適用できるように、できるだけ一般的な設定を使用しています。次の URL を使用してスクリプトを実行できるようになりました。

http://localhost/~tomas/cgi-bin/hw.cgi

public_htmlしかし、サーバーのルート ディレクトリの にmy へのリンクも配置したので/var/www/htmllocalhostURL が呼び出されると、 にある my dir へのリンクを含むインデックスが取得されますlocalhost/tomas。リンクは正常に動作し、別のインデックス (my ユーザーの 1 つ) が表示されます。プライベート cgi-bin は にあるので、プライベート インデックスを取得すると/home/*/public_html/cgi-binが表示されますcgi-bin。このディレクトリに入ると、CGI を含む別のインデックスが取得されます。これは私にとっては問題ありませんが、これが安全であるかどうかはわかりません。しかし、そこから CGI を呼び出すと、実行されず、代わりに が表示されます。これが問題です。

私の知る限り、Apacheが表示されないということだ

http://localhost/tomas/cgi-bin/hw.cgi

として

http://localhost/~tomas/cgi-bin/hw.cgi

これを機能させるディレクティブを探していたのですが、見つかりません。ディレクティブか、それとも他に何が使えるのかさえよくわかりません。

これが私のですusermod.conf:

<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>

    <Directory /home/*/public_html/cgi-bin>
        Options ExecCGI
        AddHandler cgi-script .cgi
    </Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

答え1

ディレクトリには別のパスからアクセスできるため、代替パスのセクションを他のセクションのすぐ下にcgi-binコピーする方法もあります。例:Directory

<Directory /var/www/html/*/cgi-bin>
    Options ExecCGI
    AddHandler cgi-script .cgi
</Directory>

これにより、ディレクトリ リストも無効になります。

インデックスを有効にしたい場合は、 を追加するかIndexes、にOptions変更して親オプションを継承します。例:ExecCGI+ExecCGI

<Directory /var/www/html/*/cgi-bin>
    Options Indexes ExecCGI
    AddHandler cgi-script .cgi
</Directory>

不要なオプションを継承しないため、Options Indexes ExecCGIoverを使用することをお勧めします。Options +ExecCGI

関連情報