我希望如此,当您访问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>
答案 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
指定的文件丢失了。