0
編輯:這個問題已被錯誤地標記爲How can I troubleshoot my Perl CGI script?的副本,該問題涉及如何調試Perl程序和答案解釋如何做到這一點。在這種情況下,我甚至沒有達到那樣的程度,問題原來是apache配置問題,我在Directory指令中使用了相對路徑,這些問題在這個問題的答案中沒有提及。不能讓Apache執行perl CGI腳本
原問題: 我已經建立了一個Ubuntu的測試服務器(16.04.2 LTS),並試圖獲得apache來執行perl cgi腳本。它從命令行運行良好,但在瀏覽器中始終顯示源代碼。我在本網站和其他網站上瀏覽過很多頁面的建議,但是我無法完成它,所以我們將不勝感激。
我的網站的conf文件看起來像這樣(我希望能在每個目錄基礎上執行腳本):
<VirtualHost *:443>
DocumentRoot "/var/www/test"
ServerName mydomain.org
<Directory "/var/www/test">
allow from all
Options None
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile /etc/webmin/letsencrypt-cert.pem
SSLCertificateKeyFile /etc/webmin/letsencrypt-key.pem
SSLCACertificateFile /etc/webmin/letsencrypt-ca.pem
<Directory "path/to/dir">
Options ExecCGI Indexes
AddHandler cgi-script .pl
</Directory>
</VirtualHost>
我啓用的mods目錄如下:
access_compat.load autoindex.conf mime.conf setenvif.load
alias.conf autoindex.load mime.load socache_shmcb.load
alias.load cgi.load mpm_prefork.conf ssl.conf
auth_basic.load deflate.conf mpm_prefork.load ssl.load
authn_core.load deflate.load negotiation.conf status.conf
authn_file.load dir.conf negotiation.load status.load
authz_core.load dir.load php7.0.conf
authz_host.load env.load php7.0.load
authz_user.load filter.load setenvif.conf
在error.log中沒有錯誤,訪問日誌告訴我:
mydomain.org:443 xx.xxx.xxx.xx - - [27/Apr/2017:10:37:02 +0100] "GET /path/to/dir/test.pl HTTP/1.1" 304 3921 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
腳本(test.pl)是sim從命令行工作:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world!\n";
任何人都可以告訴我我在做什麼錯嗎?
第一件事,我看到:'「路徑/到/目錄」'應該是一個絕對路徑:' 「/ path/to/dir」'不應該嗎?另外,你的'.pl'腳本是否可以執行正確的'#!'行? – cbmckay
您的明星!讓這個絕對路徑奏效!只是爲了澄清,是否有指定相對於DocumentRoot的路徑的方法? – Kees
我覺得'位置:'是你想要的。你也可以使用'.htaccess'文件。它們適用於它們所在的目錄。並且/或者你可以使用'Files'指令來使用文件擴展名來執行。 – cbmckay