Разница между <Location> и <Directory> директивами Apache

29

Я установил Zend Server и заметил, что что-то вроде следующего было добавлено в мой файл httpd.conf:

<Location /ZendServer>
 Order Allow,Deny
 Allow from 127.0.0.1
</Location>

Alias /ZendServer "C:\Program Files\Zend\ZendServer\GUI\html"

<Directory "C:\Program Files\Zend\ZendServer\GUI\html">
 AllowOverride All
</Directory>

Но я не могу понять разницу между Location и Directory . Я изменил что-то вроде следующего, что имеет больше смысла для меня, и это все еще работает:

<Location /ZendServer>
 AllowOverride All
 Order Allow,Deny
 Allow from 127.0.0.1
</Location>

Alias /ZendServer "C:\Program Files\Zend\ZendServer\GUI\html"

Могу ли я сохранить свои изменения или я должен вернуть их в прежнее состояние?

Рикардо Амарал
источник

Ответы:

41

DirectoryДиректива работает только для объектов файловой системы (например, / var / www / mypage, C: \ www \ mypage), тогда как Locationдиректива работает только для URL-адресов (часть после имени домена вашего сайта, например, www.mypage.com/mylocation).

Использование простое - вы должны использовать, Locationесли вам нужно точно настроить права доступа по URL, и использовать, Directoryесли вам нужно контролировать права доступа к каталогу (и его подкаталогам) в файловой системе.

ipozgaj
источник
Я все еще в замешательстве ... Почему Зенд использовал тогда оба? Могу ли я сохранить свои изменения или что-то не так с этим?
Рикардо Амарал
1
Нет, ваша конфигурация отличается от исходной - вы удалили AllowOverride из директивы Directory, и это означает, что вы не сможете использовать файл .htaccess в каталоге C: \ Program Files \ Zend \ ZendServer \ GUI \ html. Настройка параметров каталога отличается от настройки параметров URL, поэтому они использовали их оба.
ipozgaj
1
Длинная запись в документах apache о каталоге и местоположении (и других): httpd.apache.org/docs/2.2/sections.html
Дэн Приттс,
2

Расположение может использоваться при использовании перенаправления AJP или прокси. Например, модуль Oracle PLSQL APEX использует следующий URL: / pls / apex / f? P = 1: 1

Если вы попытаетесь ограничить это с помощью каталога, он никогда не будет работать, поскольку это транзитный, а не физический каталог на сервере. Расположение работает!

Аль гарнизон
источник