#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-адреса — на себя. Другими словами, это ничего не делает. Да? Нет?