A diretiva do Apache Directory deve ser relativa ao DocumentRoot ou não?

13

A diretiva Apache Directory deve ser relativa ao DocumentRoot ou não? Eu pergunto no contexto de um VirtualHost, mas não deve fazer nenhuma diferença.

Em outras palavras, é suposto ser:

<VirtualHost>
    DocumentRoot /var/www
    <Directory /var/www>
    ...

ou

<VirtualHost>
    DocumentRoot /var/www
    <Directory />
    ...

Ambos funcionam. Os Documentos do Apache dizem:

Directory-path is either the full path to a directory, or a wild-card string...

... mas eles mostram dois exemplos que contradizem a afirmação "caminho completo".

ED: Também há exemplos contraditórios no Apache Página de ajuste de desempenho nas seções FollowSymLinks e SymLinksIfOwnerMatch e AllowOverride .

Por diversão eu olhei para a configuração vhost padrão do Debian e achei isto:

<VirtualHost *:80>
    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ...
    
por Jeff 21.08.2013 / 15:30

1 resposta

8

A documentação está correta, e a diretiva <Directory> deve ser o caminho completo .

Seu primeiro exemplo é como você deve configurar a diretiva para VirtualHosts e aplica as opções dentro da diretiva para apenas o DocumentRoot . Seu segundo exemplo está se referindo à raiz do sistema de arquivos (literalmente / ).

Você não postou o restante da diretiva, mas isso é normalmente usado como uma maneira de tentar prender o Apache e restringir seu acesso, e é geralmente (mas nem sempre) colocado dentro do principal apache2.conf ou httpd.conf de arquivos de configuração, com seus VirtualHosts permitindo explicitamente o acesso para seus próprios diretórios DocumentRoot , então os dois são freqüentemente usados juntos.

Na documentação do Apache :

Note that the default access for <Directory /> is to permit all access. This means that Apache httpd will serve any file mapped from an URL. It is recommended that you change this with a block such as:

    <Directory />
      Require all denied
    &lt/Directory>
and then override this for directories you want accessible. See the Security Tips page for more details.
    
por 21.08.2013 / 15:51