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

Как разрешить только определенным каталогам использовать htaccess?

В настоящее время в apache2.conf у меня есть AllowOverride all набор для /var/www который просто разрешает htaccess для всех сайтов на сервере (это Ubuntu, 9.04).

Однако я бы предпочел разрешить переопределения только в каждом корневом каталоге сайта и ничего больше. Другими словами, /var/www/site1, /var/www/site2и т.д. могут иметь htaccess, но все остальные каталоги, включая /var/www и /var/www/site1/content не может.

Есть ли способ сделать это, не создавая правила для каждого сайта на сервере?

РЕДАКТИРОВАТЬ: Возможно, мой вопрос был недостаточно ясен. Но я только что попробовал пару вещей, которые не сработали так, как ожидалось. Я установил AllowOverride none для корневого каталога, затем all для конкретных каталогов, например:

<Directory ~ "^/var/www/site1$">
  AllowOverride all
</Directory>

Однако при загрузке URL типа site1.com/section/page страница не может быть найдена (показывает страницу с ошибкой браузера, а не мою страницу 404). Заметка section/page не является реальным URL-адресом файловой системы, это перезапись.

Насколько я понимаю:

  1. В предыдущей конфигурации Apache искал htaccess в /var/www/site1/section (которого не существует), попробуйте /var/www/site1, а затем любые родительские каталоги.
  2. С указанными выше директивами Apache теперь должен просто посмотреть на /var/www/site1 и никаких других каталогов. Но, похоже, это не работает ...

Вы можете указать произвольное количество тегов Справочника и настроить их независимо.

Вы также можете сделать это с помощью VirtualHost.

Подобно:

<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from all
</Directory>

Я знаю, что это довольно давно, но если кто-то еще столкнется с этим, вы можете использовать стандартный подстановочный знак «*» в путях, который соответствует любому символу, кроме косой черты, поэтому следующее ограничит htaccess только корневыми каталогами вашего сайта и никакими подкаталогами :

<Directory />
    AllowOverride None
</Directory>
<Directory /var/www/site*>
    AllowOverride All
</Directory>
<Directory /var/www/site*/*>
    AllowOverride None
</Directory>

Вы можете установить это с помощью виртуальных хостов, если вы используете виртуальные хосты.

HTH,

Км