Diferencia entre <Location> y <Directory> Directivas de Apache

29

Tengo instalado Zend Server y noté que algo como lo siguiente se agregó a mi archivo 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>

Pero parece que no puedo entender la diferencia entre Ubicación y Directorio . Cambié a algo como lo siguiente, lo que tiene más sentido para mí, y aún funciona:

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

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

¿Puedo mantener mis cambios o debo volver a ponerlos como estaban?

Ricardo Amaral
fuente

Respuestas:

41

Directoryla directiva solo funciona para los objetos del sistema de archivos (por ejemplo, / var / www / mypage, C: \ www \ mypage), mientras que la Locationdirectiva solo funciona para las URL (la parte después del nombre de dominio de su sitio, por ejemplo, www.mypage.com/mylocation).

El uso es sencillo: lo usaría Locationsi necesita ajustar los derechos de acceso mediante una URL, y lo usaría Directorysi necesita controlar los derechos de acceso a un directorio (y sus subdirectorios) en el sistema de archivos.

ipozgaj
fuente
Todavía estoy confundido ... ¿Por qué Zend usó ambos entonces? ¿Puedo conservar mis cambios o hay algo mal con eso?
Ricardo Amaral
1
No, su configuración no es la misma que la original: eliminó AllowOverride de la directiva del directorio, y eso significa que no podrá usar el archivo .htaccess en el directorio C: \ Archivos de programa \ Zend \ ZendServer \ GUI \ html. La configuración de las opciones de directorio es diferente de la configuración de las opciones de URL, es por eso que usaron ambas.
ipozgaj
1
Escritura larga en los documentos de Apache sobre Directory vs. Location (y otros): httpd.apache.org/docs/2.2/sections.html
Dan Pritts
2

La ubicación se puede usar cuando se usa un AJP o redirección de proxy. Por ejemplo, el módulo APEX PLSQL de Oracle utiliza la siguiente URL: / pls / apex / f? P = 1: 1

Si intenta restringir esto usando el directorio, nunca funcionará ya que es un directorio de paso y no un directorio físico en el servidor. ¡La ubicación funciona!

Al Garrison
fuente