Назад | Перейти на главную страницу

How multiple <directory> разделы работают в конфигурации Apache (httpd.conf)?</directory>

Например, если мой '/etc/apache2/httpd.conf' выглядит так:

<Directory />
    AllowOverride None
</Directory>

<Directory /home>
    AllowOverride FileInfo
</Directory>

Последний AllowOverride Правило отменяет своего предшественника для /home каталог. Эта часть ясна.

Но что произойдет, если мой файл httpd.conf будет выглядеть так?

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

ВОПРОСЫ:

  1. Разве это не RewriteEngine On во-первых <Directory> раздел должен применяться ко второму <Directory> раздел, учитывая, что последний является подкаталогом? Но я заметил, что мне нужно добавить RewriteEngine On правило во втором <Directory> раздел тоже.

  2. Означает ли это, что я также должен скопировать все общие правила с первого <Directory> раздел на второй <Directory> раздел? Например, AllowOverride None, Options -MultiViews, и т.д.

1. Разве не RewriteEngine On во-первых <Directory> раздел должен применяться ко второму <Directory> раздел, учитывая, что последний является подкаталогом? Но я заметил, что мне нужно добавить RewriteEngine On правило во втором <Directory> раздел тоже.

Этот ответ Джона Линя на чем RewriteOptions Inherit Директива действительно открывает глаза и косвенно отвечает на этот вопрос.

«Обычно, если у вас есть файл .htaccess в определенном подкаталоге, любые [параметры конфигурации mod_rewrite] в родительском каталоге заменяются и не применяются».

Ссылки по теме:

2. Означает ли это, что мне также следует скопировать все общие правила с первого <Directory> раздел на второй <Directory> раздел? Например, AllowOverride None, Options -MultiViews, и т.д.

Нет, поскольку все правила для '/var/www/example.com/public' (установлены в <Directory /var/www/example.com/public> раздел) также применяется к его подкаталогам, нет необходимости копировать их снова в <Directory /var/www/example.com/public/wp-content/cache/minify> раздел.

Узнать это было легко.

Я добавил это внутри <Directory /var/www/example.com/public> раздел моего httpd.conf:

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

Затем удалил файл robots.txt в каталоги /var/www/example.com/public и /var/www/example.com/public/wp-content/cache/minify. Оба были обслужены noindex Заголовок HTTP.