index.pl sendo baixado ao invés de executar no Ubuntu 12.04 e no Apache 2.2.22

1

Instalei o Apache 2.2.22 no Ubuntu 12.04. Mas no navegador quando eu digito localhost, ele dá o arquivo index.pl para baixar em vez de executá-lo. O que eu tentei:
1. chmod 755 index.pl
2. Adicionando a linha DirectoryIndex index.pl index.html a etc / apache2 / site-available / example.com, que finalmente se parece com o abaixo.

Eu fiz essas coisas antes na máquina Windows. Mas a estrutura de diretórios é diferente no Windows e no Ubuntu. O arquivo Httpd.conf está em branco no Ubuntu. E enquanto pesquisava através de diretórios eu encontrei não. de arquivos semelhantes ao arquivo de configuração. Então estou confuso onde exatamente eu tenho que fazer alterações de configuração.

<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>
    
por msinfo 03.09.2013 / 05:15

1 resposta

0

Você não explicou onde seu arquivo index.pl reside na hierarquia de arquivos, mas eu acho que você o possui no DocumentRoot.

O problema é que seu diretório DocumentRoot é tradicionalmente usado para servir documentos estáticos. Por motivos de segurança, os arquivos na hierarquia DocumentRoot não são processados (isto é, executados) - e os arquivos no diretório ScriptAlias nunca são exibidos estaticamente.

Você precisa separar seu conteúdo executável (perl, php, sh) do seu conteúdo veiculado estaticamente (arquivos html, imagens, css, js) - para que o servidor da Web saiba que os arquivos estão no diretório 'this' e abaixo de don ' t precisa ser processado (como imagens) e os arquivos nesse diretório.

Para este fim:

  1. Crie um arquivo index.html com meta headers que redirecionam para /cgi-bin/index.pl e coloque o index.html no DocumentRoot
  2. Mova seu index.pl para um diretório apontado por ScriptAlias (com uma seção Diretório correspondente - que possui o sinalizador + ExecCGI). Assegure-se de que o index.pl seja executável e garanta que sua linha shebang aponte para um perl resolvível.

A saída html do seu index.pl ainda pode referenciar imagens etc da raiz (por exemplo, colocar uma pasta de imagens na pasta raiz do documento e imagens de referência do html como /images/logo.png), e os scripts podem ser vinculados a (via submissão do formulário ou href) do seu conteúdo html da pasta de script (por exemplo, como /cgi-bin/processform.pl)

    
por finley 04.09.2013 / 10:18