apache -Directory директива - позволяет обслуживать выбранные страницы

Этот синтаксис препятствует тому, чтобы Apache обслуживал любые страницы из /var/www или подкаталогов.

 <Directory "/var/www">
     Allow from None
     Order allow,deny
 </Directory>

Я хочу это поведение, как правило, за некоторыми исключениями. Например, я хочу, чтобы пользователи могли получить доступ

 /var/www  
 /var/www/css
 /var/www/js

но нет:

 /var/www/app
 /var/www/xml
 /var/www/foo
 /var/www/bar
 ... and many more

2 ответа

Если вы разрешите ни от кого или откажетесь от всех, то никто не сможет получить доступ к содержимому каталога.

если вы хотите более точный контроль, чем все или ничего, вы должны взглянуть на элементы управления доступом в документации Apache, которая в основном

[ allow | deny ] from address

адрес может быть доменом ip или именем хоста.

Вы можете работать с DirectoryMatch, чтобы установить правило запрета для большинства каталогов, кроме некоторых.

Но я думаю, что ваша настоящая проблема в том, что у вас есть много папок внутри корневого каталога (/var/www), и вы не хотите, чтобы кто-либо имел доступ к этим каталогам. Так почему они здесь?

Организация более чистого пути будет:

  • / путь / к / проекту: корень проекта
  • / path / to / project / www: корень документа проекта apache (DocumentRoot))
  • / path / to / project / www / [js | css]: некоторые допустимые веб-ресурсы
  • / path / to / project / lib: библиотеки приложений, код
  • /path/to/project/lib/[app|xml|foo|bar]: библиотеки приложения, код
  • / путь / к / проекту /[etc|doc|var|tmp]: другое

Apache не может получить доступ к чему-либо до DocumentRoot, кроме случаев, когда вы задали несколько псевдонимов, но вам не нужны псевдонимы. все вещи, которые не требуют прямого доступа через URL, не должны находиться под DocumentRoot. Большинство CMS игнорируют это базовое правило просто потому, что они хотят быть легко развернутыми на очень ограниченных политиках хостов (где у вас есть доступ только к корню документа через ftp).

Это может быть сделано с любым языком, jsp' asp' php. Вам нужен только файл начальной загрузки (а именно index.php, index.jsp, index.asp) в корне веб-каталога, любой другой ресурс загружается в приложение через директивы include и параметры пути к библиотеке.

С этим вы избежите многих проблем с раскрытием информации (за исключением всего, что вы можете найти в приложении к пакетам библиотек js, обязательно приостановите выполнение php на путях ресурсов js).

Другие вопросы по тегам