2011-02-10 21:52:57 +0000 2011-02-10 21:52:57 +0000
101
101

Como faço para que o Apache siga os links simbólicos?

Na minha pasta apache www (/var/www no ubuntu 10.10) eu tenho:

mydir -> /home/user/mydir

(que criei com ln -s)

Agora, se quiser ver uma listagem dos ficheiros em mydir a partir da web, tenho de dar ao apache a directiva FollowSymLinks, certo?

Mas onde a ponho? Num ficheiro .htaccess? Onde? Tentei de muitas maneiras mas não compreendo…

Este é o meu ficheiro /etc/apache2/sites-enabled/000-default:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks Indexes
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        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>

    Alias /downloads/ "/root/mydir/"
    <Directory "/root/mydir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

Respostas (4)

67
67
67
2011-02-10 21:56:40 +0000

Existem duas coisas aqui:

  1. symlinks
  2. listagem de directórios

symlinks

Assumindo que o /var/www é o seu DocumentRoot para o seu anfitrião virtual predefinido, deverá encontrar o seu ficheiro de configuração de anfitrião virtual predefinido (provavelmente /etc/apache2/sites-enabled/000-default) e colocá-lo dentro desse bloco de anfitrião virtual, e. g.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

Se não alterou nada, essa opção já deve existir.

** listagem de directórios**

Para fazer o Apache listar os ficheiros num directório, também deve activar a opção Indexes, e. g. alterar

<Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

em /etc/apache2/sites-enabled/000-default para:

<Directory />
        Options FollowSymLinks Indexes
        AllowOverride None
    </Directory>

porquê . htaccess não funciona

Por defeito, colocar /home/user/mydir/.htaccess num ficheiro Options <something> não funciona devido à outra entrada no seu ficheiro de configuração: .htaccess.

É por isso que temos de colocar AllowOverride None lá.

AllowOverride documentation )

12
12
12
2011-02-10 22:00:05 +0000

A opção deve ser utilizada da seguinte forma:

Options +FollowSymLinks

Normalmente é colocada na configuração Apache (httpd.conf ou conf.d/ ou sites-enabled/) dentro de um <Directory>.

Veja Options , AllowOverride e <Directory> na documentação Apache.

10
10
10
2014-10-02 19:14:39 +0000

Com a configuração original (fresca) no Ubuntu 14.04 com apache 2.4.7, não há necessidade de alterar nada no *.conf para seguir os links simbólicos criados em /var/wwww/html.

Mas é necessário que o utilizador www-data tenha acesso a ALL o caminho do alvo symlink (mesmo para virtualhosts não só para simlinks). Por exemplo,

cd /var/www/html
ln -s /path/to/mirror/cran-mirror cran

Neste exemplo o utilizador www-data (ou todos os utilizadores se quiser, mas pode ser perigoso) precisa de executar direitos até ao directório. Necessita x direitos em cada um dos /caminho, /caminho/para, e /caminho/para/espelho. Também precisa Ler permissão no diretório de destino, e, dependendo do objetivo do diretório, talvez o usuário www-data precise escrever permissões também.

Clue foi obtido de https://stackoverflow.com/a/14623574

1
1
1
2014-09-10 15:31:58 +0000

Não consegui pôr isto a funcionar até instalar o módulo autoindex apache. De numerosos posts em blogs e fóruns, ninguém mencionou a sua necessidade. Espero que isto ajude alguém.