Как предотвратить наследование .htaccess?

#apache #.htaccess

#apache #.htaccess

Вопрос:

AFAIK по умолчанию анализируются все файлы .htaccess во всех каталогах, ведущих к запрошенному файлу, т.Е. в этой настройке:

  • DOC_ROOT = /usr/local/www/data
  • AllowOverride имеет значение All в приведенном выше каталоге

если запрашивается файл по адресу /dir1/dir2/dir3/file , проверяются все папки от / вниз .htaccess . Если файл найден, он анализируется, а затем выполнение продолжается на основе объединенного содержимого .htaccess файлов.

Итак, вот моя установка:

  • DOC_ROOT = /usr/local/www/data — там хранятся все статические файлы и файлы php.
  • в .htaccess есть DOC_ROOT , который переписывает все запросы, кроме некоторых, на index.php .
  • там есть /Python/root.wsgi в DOC_ROOT и в httpd.conf есть это: WSGIScriptAlias /apps /usr/local/www/data/Python/root.wsgi

Как вы можете себе представить, я вообще не хочу, чтобы .htaccess использовался для папки / Python, но это так. Как мне предотвратить это?

Я попытался установить это в httpd.conf, но это не сработало:

 <Directory "/usr/local/www/apache22/data/Python">
    AllowOverride None
</Directory>
  

Если я помещу .htaccess в папку Python с RewriteEngine off , которая, похоже, выполняет свою работу, но я не хочу, чтобы меня заставляли помещать такой файл в каждую из вложенных папок, я не хочу использовать root .htaccess.

Ответ №1:

К сожалению, нет способа отключить наследование. Более простым способом может быть создание единой папки в корневом каталоге вашего веб-сайта для «всего остального», а в .htaccess там поместите RewriteEngine off инструкцию.

Я думаю, вы можете что-то сделать с RewriteCond , чтобы отключить это. Если вы хотите, чтобы все вложенные папки были просто доступны (и переписать все, что не соответствует существующей вложенной папке), вы можете использовать RewriteCond !-d .

Комментарии:

1. И вы не можете изменить это с помощью опции AllowOverride?

2. Чтобы ответить на мой собственный вопрос — AllowOverride работает для каждого каталога, т. Е. Если для папки установлено значение None, это подпапка той, в которой он включен, родительский .htaccess будет проанализирован, но его собственный нет.

Ответ №2:

Самый простой способ — установить это в корне .htaccess вашего сайта для каждого каталога.

Итак, допустим, у вас есть подкаталог «Python», вы бы добавили это в .htaccess в свой DOCROOT.

RewriteRule ^Python/.*$ — [L]

Комментарии:

1. Я смотрел на это, может, просто не могу понять, что это делает. Кажется, он переписывается https://Python/. на https://Python/. . Но в этом нет никакого смысла. Он переписывает этот конкретный запрос подкаталога на себя (дефис означает отсутствие изменений), а все остальные URL-адреса — на себя. Другими словами, это ничего не делает. Да? Нет?