Questão Como obtenho o Apache para seguir links simbólicos?


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

mydir -> /home/user/mydir

(que eu criei com ln -s)

Agora, se eu quiser ver uma listagem dos arquivos em mydir da web, eu tenho que dar ao apache a diretiva FollowSymLinks, certo?

Mas onde eu coloco isso? Em um .htaccess Arquivo? Onde? Eu tentei de muitas maneiras, mas eu não entendo isso ...

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

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

84


origem


Eu também tentei com um alias no arquivo de configuração .. ainda não funciona .. - luca


Respostas:


Existem duas coisas aqui:

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

links simbólicos

Assumindo /var/www é o seu DocumentRoot para o seu host virtual padrão, você deve encontrar o arquivo de configuração do host virtual padrão (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ê precisa ativar o Indexes opção também, por ex. mudança

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

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

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

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

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

e colocar isso em /home/user/mydir/.htaccess.

    Option Indexes

porque o .htaccess não funciona

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

É por isso que temos que colocar AllowOverride Indexes há.

(Documentação AllowOverride)


57



olha o meu arquivo de configuração acima ... ele não funciona ainda ... - luca
pode ser um problema de permissões? Eu sou usuário root, eu sei que não é uma boa coisa para usar um sistema como root, de qualquer maneira .. Eu sou root eo diretório que eu symlink para está no root home / root / mydir .. - luca
Sim. Qual mensagem de erro você vê? Você precisará fazer sudo chmod ugo+x /root; sudo chmod ugo+rx /root/mydir para fazer funcionar, e isso provavelmente não é uma boa ideia. Melhor para mover os arquivos em algum lugar abaixo /var/www se você 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 em /var/log/apache2/error.log. - Mikel
Certifique-se de que você não está apontando para o seu diretório pessoal quando ele estiver criptografado, ou seja, um link simbólico em /var/www → /home/user/directory. Isso produzirá uma enorme dor de cabeça.


A opção deve ser usada assim:

Options +FollowSymLinks

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

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


10



No caso do FollowSymLinks, especificamente, ele DEVE estar dentro de uma estrutura do Diretório quando estiver dentro de um arquivo .conf. Do manual atual do Apache "As opções FollowSymLinks e SymLinksIfOwnerMatch funcionam somente nas seções <Directory> ou nos arquivos .htaccess." - ClearCrescendo
Aviso: Opções de mistura com um + ou - com aqueles sem é uma sintaxe inválida e provavelmente causará resultados inesperados. - kurdtpage


Com a configuração original (nova) no Ubuntu 14.04 com o 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 TODOS o caminho do destino do symlink (mesmo para virtualhosts não apenas para simlinks). 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 todo o caminho para o diretório. Precisa de x direitos em cada um dos / path, / path / to e / path / to / mirror. Também precisa Ler permissão 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.

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


9





Eu não consegui fazer isso funcionar até instalar o módulo apache do autoindex. De inúmeros posts no blog e posts do fórum, ninguém mencionou que é necessário. Espero que isso ajude alguém.


1