userdir
Apacheのモードを使用してCGIディレクトリを設定しました。私はラップトップの他のユーザーにも動作できるようにできるだけ一般的な設定を使用します。次のURLを使用してすでにスクリプトを実行できます。
http://localhost/~tomas/cgi-bin/hw.cgi
public_html
ただし、サーバーのルートにもリンクを入れてURLが呼び出される/var/www/html
とlocalhost
、私のディレクトリへのリンクを含むインデックスを取得しますlocalhost/tomas
。リンクが正しく機能し、私のユーザーの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
別のパスを介してディレクトリにアクセスできるため、1つの方法は別のパスのすぐ下に代替パスがあるセクションをコピーすることです。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 ExecCGI
overを使用することをお勧めします。Options +ExecCGI