¿Cuál es la diferencia entre $ {var} y% {var} en httpd.conf?
Prácticamente todo. No hay una regla estricta que diga " $
hace x, %
hace y", porque hacen cosas diferentes dependiendo de dónde y cómo se usan.
¿Se utilizará $ {VAR} en todas partes en httpd.conf, excepto en las directivas mod_rewrite
No: ${VAR}
se aplica como reemplazo en cada ubicación a lo largo de la configuración, incluso en una línea relacionada con mod_rewrite. Estos solo se pueden definir al inicio utilizando la -D
opción pasada al binario httpd, o la Define
directiva.
Esto se puede hacer porque esas variables no deben contener un :
carácter, mientras que el RewriteMap
uso debe contener un :
carácter. Esto permite $
que se use de maneras extremadamente diferentes sin conflicto: el analizador lo ve :
y sabe que se supone que no debe reemplazar eso.
¿Se usaría una variable establecida en httpd.conf usando la Directiva SetEnvIf, para usar en la misma httpd.conf, como $ {var} excepto cuando la variable se usa con directivas mod_rewrite, donde la variable se usaría como% {var}?
No. Las variables de entorno no son las mismas que las variables establecidas mediante -D
o Define
: son un contexto por solicitud completamente separado (esas son las que está configurando SetEnvIf
), que solo usarán ciertas directivas. Se mencionan específicamente donde se admiten: en mod_rewrite son %{ENV:variable}
, en los registros son %{variable}e
, y muchas directivas tienen una verificación lógica que se parece env=variable
.
Así que básicamente; Es un desastre confuso: un testimonio de la historia del servidor web en las últimas dos décadas. Probablemente lo principal que te confunde es que la sintaxis de mod_rewrite no se extiende a ninguna otra parte de la configuración de ninguna manera; Todo es diferente. El punto principal de todo esto es que no hay una 'regla' gobernante para que todo esto tenga sentido: un $
en un lugar significa algo completamente diferente de $
otro en otro.
Algunos puntos de referencia útiles:
- Si está buscando establecer una variable estáticamente cuando Apache se inicia, use
Define
y ${VAR}
para reemplazar una vez, en el inicio de Apache. Esto es principalmente útil para cuando desea hacer algo como compartir archivos de configuración entre un entorno de desarrollo y producción, pero no debe confundirse con el uso de $
from RewriteMap
, que siempre contiene un :
.
- Si está buscando trabajar con variables en solicitudes específicas, entonces las variables de entorno son lo que busca, pero no puede hacer suposiciones sobre la sintaxis que usará para obtenerlas cuando se use con una directiva específica. Deberá verificar la documentación de esa directiva.
- Cuando mod_rewrite esté en cuestión, deseche todo lo que creía saber sobre las variables y su sintaxis. Tiene su propio conjunto de variables
%{VAR}
, puede obtener sus variables de entorno 'normales' con %{ENV:VAR}
, y puede establecer variables de entorno con [E=VAR]
.