web-dev-qa-db-fra.com

index.pl se télécharger au lieu d'exécuter sur Ubuntu 12.04 et Apache 2.2.22

J'ai installé Apache 2.2.22 sur Ubuntu 12.04. Mais dans le navigateur, lorsque je tape localhost, il donne le fichier index.pl à télécharger au lieu de l’exécuter. Ce que j'ai essayé:
1. chmod 755 index.pl
2. Ajout de la ligne DirectoryIndex index.pl index.html à etc/Apache2/site-available/example.com, qui se présente comme ci-dessous.

J'ai déjà fait ces choses sur une machine Windows. Mais la structure des répertoires est différente sous Windows et Ubuntu. Le fichier Httpd.conf est vide dans Ubuntu. Et en cherchant dans les annuaires, j'ai trouvé non. de fichiers similaires au fichier de configuration. Donc, je suis confus où exactement je dois faire des changements de configuration.

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

Vous n'avez pas expliqué l'emplacement de votre fichier index.pl dans la hiérarchie des fichiers, mais je suppose que vous l'avez dans votre DocumentRoot.

Le problème, c'est que votre répertoire DocumentRoot est généralement utilisé pour servir des documents statiques. Pour des raisons de sécurité, les fichiers de la hiérarchie DocumentRoot ne sont jamais traités (c'est-à-dire exécutés) - et les fichiers du répertoire ScriptAlias ​​ne sont jamais servis de manière statique.

Vous devez séparer votre contenu exécutable (Perl, php, sh) de votre contenu servi statiquement (fichiers html, images, css, js) - afin que le serveur Web sache que les fichiers situés dans le répertoire 'this' et en-dessous ne sont pas nécessaires. être traité (comme des images) et les fichiers de ce répertoire le sont.

À cette fin:

  1. Créez un fichier index.html avec des en-têtes méta qui redirigent vers /cgi-bin/index.pl et placez le fichier index.html dans le répertoire DocumentRoot.
  2. Déplacez votre index.pl dans un répertoire désigné par ScriptAlias ​​(avec une section Directory correspondante - qui a le drapeau + ExecCGI). Assurez-vous que le fichier index.pl est exécutable et que sa ligne Shebang pointe vers un Perl pouvant être résolu.

La sortie html de votre index.pl peut toujours référencer des images, etc. à partir de la racine (par exemple, placez un dossier images dans le dossier racine de votre document et référencez des images html sous la forme /images/logo.png), et les scripts peuvent être liés (via formulaire). soumission ou href) à partir du contenu HTML du dossier de script (par exemple, sous la forme /cgi-bin/processform.pl)

0
finley