在 Ubuntu 12.04 和 Apache 2.2.22 上,index.pl 被下载而不是执行

在 Ubuntu 12.04 和 Apache 2.2.22 上,index.pl 被下载而不是执行

我在 Ubuntu 12.04 上安装了 Apache 2.2.22。但是在浏览器中输入 localhost 时,它会提供 index.pl 文件供下载,而不是执行它。我尝试了以下方法:
1. chmod 755 index.pl
2. 将行 DirectoryIndex index.pl index.html 添加到 etc/apache2/site-available/example.com,最终如下所示。

我以前在 Windows 机器上做过这些事情。但 Windows 和 Ubuntu 中的目录结构不同。Ubuntu 中的 Httpd.conf 文件是空白的。在搜索目录时,我发现没有与配置文件类似的文件。所以我很困惑我到底需要在哪里进行配置更改。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
        ServerName example.com
    DocumentRoot /var/www/example.com/public_html
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/example.com/public_html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
# This line was added by me
DirectoryIndex index.html index.pl
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

答案1

您没有解释您的 index.pl 文件在文件层次结构中的位置,但我猜测它位于您的 DocumentRoot 中。

问题在于,DocumentRoot 目录传统上用于提供静态文档。出于安全原因,DocumentRoot 层次结构中的文件永远不会被处理(即执行) - 并且 ScriptAlias 目录中的文件永远不会被静态提供。

您需要将可执行内容(perl、php、sh)与静态提供的内容(html 文件、图像、css、js)分开,以便 Web 服务器知道“此”目录及以下目录中的文件不需要处理(例如图像),而该目录中的文件则需要处理。

为此:

  1. 创建一个带有重定向到 /cgi-bin/index.pl 的元标头的 index.html 文件,并将 index.html 放在 DocumentRoot 中
  2. 将 index.pl 移动到 ScriptAlias 指向的目录(具有相应的 Directory 部分 - 具有 +ExecCGI 标志)。确保 index.pl 是可执行的,并确保其 shebang 行指向可解析的 perl。

index.pl 的 html 输出仍然可以从根目录引用图像等(例如,将图像文件夹放在文档根文件夹中,并从 html 中引用图像作为 /images/logo.png),并且可以从脚本文件夹的 html 内容中链接到脚本(通过表单提交或 href)(例如 /cgi-bin/processform.pl)

相关内容