Apache2将perl脚本作为目录索引运行

时间:2013-10-02 14:19:53

标签: linux perl apache cgi virtualhost

我希望如此,当您访问https://device.my.server.com/reg时,服务器运行/var/www/html/reg/registrar.cgi这是一个perl脚本。现在它只是列出目录的内容。我知道脚本可以工作,并为每个人设置了可执行位。服务器是CentOS linux HTTPD 2.2.15。我不能使用mod-redirect或rewrite,我需要使用像我正在尝试的核心指令那样做。

<VirtualHost device.my.server.com:443>
DocumentRoot /var/www/html/reg
ServerName device.my.server.com
ErrorLog logs/device.my.server.com-error_log
CustomLog logs/device.my.server-access_log co
SSLEngine on
SSLCertificatekeyFile /etc/httpd/ssl/device.my.server.com.key
SSLCertificateFile /etc/httpd/ssl/device.my.server.com.crt
SSLCertificateChainFile /etc/httpd/ssl/chain.crt
<Directory /var/www/html/reg>
    Options ExecCGI
    AddHandler cgi-script .cgi
    DirectoryIndex registrar.cgi
    Order allow,deny
    Allow from all
    #SetHandler cgi-script
</Directory>
</VirtualHost>

1 个答案:

答案 0 :(得分:1)

问题是您尝试访问DocumentRoot这样的VirtualHost

https://device.my.server.com/reg

当你应该像这样访问它时:

https://device.my.server.com/

如果您想使用以前的网址,请将DocumentRoot更改为/var/www/html

另外,请确保在测试时使用VirtualHost指令中指定的完整地址(例如https://device.my.server.com/,而不是http://device.my.server.com/https://device/)。

在我的测试中,当我访问/var/www/html/test/foo.cgi时,以下配置执行https://device.my.server.com/test(显然我已经编辑了主机/域名):

<VirtualHost device.my.server.com:443>
    DocumentRoot /var/www/html
    ServerName device.my.server.com
    SSLEngine on
    SSLCertificateFile /path/to/cert
    SSLCertificateKeyFile /path/to/key

    <Directory /var/www/html/test>
        Options ExecCGI
        AddHandler cgi-script .cgi
        DirectoryIndex foo.cgi
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

您可能还会考虑关闭索引作为额外的安全措施:

Options -Indexes

这将告诉Apache不要创建目录列表,即使DirectoryIndex指定的文件丢失了。