Qual è la differenza tra $ {var} e% {var} in httpd.conf?
Praticamente tutto. Non esiste una regola rigida che dice " $
fa x, %
fa y", perché fanno cose diverse a seconda di dove e come vengono usate.
$ {VAR} sarà usato ovunque in httpd.conf, tranne nelle direttive mod_rewrite
No: ${VAR}
viene applicato in sostituzione in ogni posizione della configurazione, anche in una riga relativa a mod_rewrite. Questi possono essere definiti all'avvio utilizzando l' -D
opzione passata al file binario httpd o alla Define
direttiva.
Questo può essere fatto perché tali variabili non devono contenere un :
carattere, mentre l' RewriteMap
uso deve contenere un :
carattere. Ciò consente $
di utilizzarlo in modi estremamente diversi senza conflitti: il parser vede :
e sa che non dovrebbe sostituirlo.
Una variabile impostata in httpd.conf usando la direttiva SetEnvIf, per essere usata nello stesso httpd.conf, verrebbe usata come $ {var} tranne quando la variabile viene usata con la direttiva mod_rewrite, dove la variabile verrebbe usata come% {var}?
No. Le variabili di ambiente non sono le stesse delle variabili impostate tramite -D
o Define
- sono un contesto per richiesta completamente separato (quelli sono quelli che stai impostando SetEnvIf
), che verranno utilizzate solo da alcune direttive. Sono specificamente menzionati dove supportati: in mod_rewrite sono %{ENV:variable}
, nei registri sono %{variable}e
e molte direttive hanno un controllo logico che sembra env=variable
.
Quindi in poche parole; è un disordine confuso - una testimonianza della storia del web server negli ultimi due decenni. Probabilmente la cosa principale che ti confonde è che la sintassi di mod_rewrite non si estende a nessun'altra parte della configurazione in alcun modo; è tutto diverso. Il punto principale da prendere da tutto ciò è che non esiste una 'regola' governativa per dare un senso a tutto ciò - un $
in un punto significa qualcosa di completamente diverso da un $
in un altro punto.
Alcuni utili punti di riferimento:
- Se stai cercando di impostare staticamente una variabile all'avvio di Apache, usa
Define
e ${VAR}
sostituisci una volta, all'avvio di Apache. Questo è utile soprattutto quando vuoi fare qualcosa come condividere file di configurazione tra un ambiente di sviluppo e produzione, ma non deve essere confuso con l'uso di $
from RewriteMap
, che contiene sempre a :
.
- Se stai cercando di lavorare con variabili in richieste specifiche, allora le variabili di ambiente sono ciò che stai cercando, ma non puoi fare ipotesi sulla sintassi che utilizzerai per ottenerle quando utilizzate con una direttiva specifica. Dovrai controllare la documentazione per quella direttiva.
- Quando mod_rewrite è in questione, elimina tutto ciò che pensavi di sapere sulle variabili e sulla loro sintassi. Ha un proprio set di variabili
%{VAR}
, puoi ottenere le tue variabili di ambiente "normali" con %{ENV:VAR}
e puoi impostare le variabili di ambiente con [E=VAR]
.