1

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

<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>
4

1 回答 1

1

问题是你正试图访问DocumentRoot你的VirtualHost这样的:

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

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

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

如果您想使用以前的 URL,请将您的更改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丢失。

于 2013-10-02T15:10:49.387 回答