Como faço para o Apache seguir links simbólicos?

98

Na minha pasta www apache ( /var/wwwno ubuntu 10.10), tenho:

mydir -> /home/user/mydir

(com quem eu criei ln -s)

Agora, se eu quiser ver uma lista dos arquivos mydirda Web, tenho que fornecer ao apache a diretiva FollowSymLinks, certo?

Mas onde eu coloco isso? Em um .htaccessarquivo? Onde? Eu tentei de várias maneiras, mas não entendo ...

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

<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>
luca
fonte
Eu também tentei com um alias no arquivo de configuração .. ainda não funciona ..
luca

Respostas:

65

Há duas coisas aqui:

  1. links simbólicos
  2. listagem de diretório

links simbólicos

Supondo que /var/wwwseu DocumentRoot seja seu host virtual padrão, você deve encontrar o arquivo de configuração padrão do host virtual (provavelmente /etc/apache2/sites-enabled/000-default) e colocá-lo dentro desse bloco de host virtual, por exemplo,

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

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

Se você não mudou nada, essa opção já deve estar lá.

listagem de diretório

Para fazer o Apache listar os arquivos em um diretório, você também precisa habilitar a Indexesopção, por exemplo, alterar

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

em /etc/apache2/sites-enabled/000-defaultque:

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

Ou, talvez uma maneira mais segura seja alterá-lo para:

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

e coloque isso /home/user/mydir/.htaccess.

    Option Indexes

por que .htaccess não funciona

Por padrão, colocando Options <something>em um .htaccessarquivo não irá funcionar por causa da outra entrada no seu arquivo de configuração: AllowOverride None.

É por isso que temos que colocar AllowOverride Indexeslá.

( Documentação AllowOverride )

Mikel
fonte
olhe para o meu arquivo de configuração acima ... ele ainda não funciona ...
luca
pode ser um problema de permissões? Eu sou usuário root, sei que não é uma boa coisa usar um sistema como root, de qualquer maneira .. Eu sou root e o diretório em que eu faço o link simbólico está na raiz home / root / mydir ..
luca
1
Sim. Que mensagem de erro você vê? Você precisará sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydirfazer isso para funcionar, e isso provavelmente não é uma boa ideia. Melhor mover os arquivos para algum lugar abaixo, /var/wwwse puder.
Mikel
Sempre que você receber um erro e estiver pedindo ajuda, forneça a mensagem de erro exata para nós. E haverá pistas /var/log/apache2/error.log.
Mikel
7
Certifique-se de não apontar para o seu diretório pessoal quando o tiver criptografado, ou seja, um link simbólico em /var/www/home/user/directory. Isso produzirá uma enorme dor de cabeça.
11

A opção deve ser usada assim:

Options +FollowSymLinks

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

Veja Options, AllowOverridee <Directory>na documentação do Apache.

gravidade
fonte
1
No caso do FollowSymLinks especificamente, DEVE estar dentro de uma estrutura de diretórios quando estiver dentro de um arquivo .conf. No manual atual do Apache "As opções FollowSymLinks e SymLinksIfOwnerMatch funcionam apenas nas seções <Directory> ou nos arquivos .htaccess."
ClearCrescendo
1
Aviso: misturar opções com um + ou - com aqueles sem sintaxe inválida e provavelmente causará resultados inesperados.
precisa saber é o seguinte
10

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 / www / html.

Mas é necessário que o usuário www-data tenha acesso a TODO o caminho do destino do link simbólico (mesmo para virtualhosts, não apenas para links simbólicos). Por exemplo,

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

Neste exemplo, o usuário www-data (ou todos os usuários, se você quiser, mas pode ser perigoso) precisa executar direitos até o diretório. Precisa de x direitos em cada um dos caminhos / caminho / caminho / e / caminho / espelho /. Também precisa de permissão de leitura no diretório de destino e, dependendo do objetivo do diretório, talvez o usuário www-data também precise de permissões de gravação.

A dica foi obtida em https://stackoverflow.com/a/14623574

victe
fonte
1

Não consegui fazer isso funcionar até instalar o módulo apache autoindex. Das inúmeras postagens em blogs e fóruns, ninguém mencionou a necessidade. Espero que isso ajude alguém.

originalbryan
fonte