Diferença entre diretivas <Location> e <Directory> Apache

29

Eu tenho o Zend Server instalado e notei que algo como o seguinte foi adicionado ao meu arquivo 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>

Mas não consigo entender a diferença entre local e diretório . Mudei para algo como o seguinte, o que faz mais sentido para mim e ainda funciona:

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

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

Posso manter minhas alterações ou devo colocá-las de volta do jeito que estavam?

Ricardo Amaral
fonte

Respostas:

41

DirectoryA diretiva funciona apenas para objetos do sistema de arquivos (por exemplo, / var / www / mypage, C: \ www \ mypage), enquanto a Locationdiretiva funciona apenas para URLs (a parte após o nome do domínio do site, por exemplo, www.mypage.com/mylocation).

O uso é direto - você usaria Locationse precisar ajustar os direitos de acesso por uma URL e usaria Directoryse precisar controlar os direitos de acesso a um diretório (e seus subdiretórios) no sistema de arquivos.

ipozgaj
fonte
Eu ainda estou confuso ... Por que Zend usou os dois então? Posso manter minhas alterações ou há algo errado com isso?
Ricardo Amaral
1
Não, sua configuração não é a mesma que a original - você removeu o AllowOverride da diretiva Directory e isso significa que não poderá usar o arquivo .htaccess no diretório C: \ Arquivos de Programas \ Zend \ ZendServer \ GUI \ html. A configuração das opções de diretório é diferente da configuração das opções de URL; é por isso que eles usaram os dois.
ipozgaj
1
Longo writeup na documentação do Apache sobre Diretório vs. Local (e outros): httpd.apache.org/docs/2.2/sections.html
Dan Pritts
2

O local pode ser usado ao usar um AJP ou redirecionamento de proxy. Por exemplo, o módulo PLSQL APEX da Oracle usa o seguinte URL: / pls / apex / f? P = 1: 1

Se você tentar restringir isso usando o diretório, ele nunca funcionará, pois é um diretório de passagem e não físico no servidor. Localização funciona!

Al Garrison
fonte