userdir
我已经使用Apache 中的 mod设置了一个 CGI 目录。我使用尽可能通用的配置,以使它们适用于我的笔记本电脑上的其他用户。我已经可以使用以下 URL 运行脚本了:
http://localhost/~tomas/cgi-bin/hw.cgi
public_html
但我还在服务器的根目录中放置了一个链接/var/www/html
,因此当localhost
调用 URL 时,我会获取带有指向我的目录的链接的索引localhost/tomas
。该链接工作正常,并显示另一个索引,即我的用户之一。现在,私有 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 ExecCGI
overOptions +ExecCGI
因为这样你就不会继承任何不需要的选项。