Например, если мой '/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>
ВОПРОСЫ:
Разве это не RewriteEngine On
во-первых <Directory>
раздел должен применяться ко второму <Directory>
раздел, учитывая, что последний является подкаталогом? Но я заметил, что мне нужно добавить RewriteEngine On
правило во втором <Directory>
раздел тоже.
Означает ли это, что я также должен скопировать все общие правила с первого <Directory>
раздел на второй <Directory>
раздел? Например, AllowOverride None
, Options -MultiViews
, и т.д.
1. Разве не
RewriteEngine On
во-первых<Directory>
раздел должен применяться ко второму<Directory>
раздел, учитывая, что последний является подкаталогом? Но я заметил, что мне нужно добавитьRewriteEngine On
правило во втором<Directory>
раздел тоже.
Этот ответ Джона Линя на чем RewriteOptions Inherit
Директива действительно открывает глаза и косвенно отвечает на этот вопрос.
«Обычно, если у вас есть файл .htaccess в определенном подкаталоге, любые [параметры конфигурации mod_rewrite] в родительском каталоге заменяются и не применяются».
Ссылки по теме:
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#vhosts
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.