Como várias seções do Directory funcionam na configuração do Apache (httpd.conf)?

3

Por exemplo, se o meu '/etc/apache2/httpd.conf' for assim:

<Directory />
    AllowOverride None
</Directory>

<Directory /home>
    AllowOverride FileInfo
</Directory>

A última regra AllowOverride substitui seu predecessor pelo diretório /home . Essa parte é clara.

Mas o que acontece se meu arquivo httpd.conf estiver assim?

<Directory /var/www/example.com/public>

    AllowOverride None
    Options -MultiViews

    <IfModule mod_rewrite.c>

        RewriteEngine On
        RewriteBase /

        [...]

    </IfModule>

    [...]

</Directory>

<Directory /var/www/example.com/public/wp-content/cache/minify>
    <IfModule mod_rewrite.c>

        # WHY IS 'RewriteEngine On' REQUIRED?
        RewriteEngine On

        RewriteBase /wp-content/cache/minify/
        RewriteRule [...]

    </IfModule>
</Directory>

PERGUNTAS:

  1. A seção RewriteEngine On na primeira <Directory> deveria se aplicar à segunda seção <Directory> , considerando que a última é um subdiretório? Mas notei que também preciso adicionar a regra RewriteEngine On na segunda seção <Directory> .

  2. Isso significa que eu também devo copiar todas as regras comuns da primeira seção <Directory> para a segunda seção <Directory> ? Por exemplo, AllowOverride None , Options -MultiViews , etc.

por its_me 23.09.2013 / 16:42

1 resposta

2

1. Isn't the RewriteEngine On in the first <Directory> section supposed to apply to the second <Directory> section as well, considering that the latter is a sub-directory? But I noticed that I need to add the RewriteEngine On rule in the second <Directory> section as well.

Esta resposta de Jon Lin sobre o que a diretiva RewriteOptions Inherit faz é um abridor de olho, e indiretamente responde a esta pergunta .

"Normalmente, se você tiver um arquivo .htaccess em um subdiretório específico, qualquer [configuração mod_rewrite] em um diretório pai será substituída e não será aplicada."

Links relacionados:

2. Does this mean that I should also copy all the common rules from the first <Directory> section to the second <Directory> section? For example, AllowOverride None, Options -MultiViews, etc.

Não, como todas as regras para '/var/www/example.com/public' (definidas na seção <Directory /var/www/example.com/public> ) também se aplicam a seus subdiretórios, não é necessário copiá-las novamente na seção <Directory /var/www/example.com/public/wp-content/cache/minify> .

Descobrir isso foi fácil.

Eu adicionei isso dentro da seção <Directory /var/www/example.com/public> do meu httpd.conf:

<IfModule mod_headers.c>    
    # Set noindex header for robots.txt
    <FilesMatch "robots.txt">
        Header set X-Robots-Tag "noindex"
    </FilesMatch>
</IfModule>

Em seguida, descartou um arquivo robots.txt nos diretórios '/var/www/example.com/public' e '/var/www/example.com/public/wp-content/cache/minify'. Ambos foram veiculados com o cabeçalho noindex HTTP.

    
por 23.09.2013 / 19:18