Apa perbedaan antara $ {var} dan% {var} di httpd.conf?
Semuanya cukup banyak. Tidak ada aturan keras dan cepat yang mengatakan " $
tidak x, %
ya", karena mereka melakukan hal-hal yang berbeda tergantung di mana dan bagaimana mereka digunakan.
Akankah $ {VAR} digunakan di mana saja di httpd.conf, kecuali dalam direktif mod_rewrite
Tidak - ${VAR}
diterapkan sebagai pengganti di setiap lokasi di seluruh konfigurasi, bahkan di jalur terkait mod_rewrite. Ini hanya dapat didefinisikan saat startup menggunakan -D
opsi yang diteruskan ke biner httpd, atau Define
arahan.
Ini bisa dilakukan karena variabel-variabel itu tidak boleh mengandung :
karakter, sedangkan RewriteMap
penggunaannya harus mengandung :
karakter. Hal ini memungkinkan untuk $
digunakan dengan cara yang sangat berbeda tanpa konflik - parser melihat :
dan mengetahui bahwa itu tidak seharusnya menggantikan itu.
Apakah variabel diatur dalam httpd.conf menggunakan SetEnvIf Directive, untuk digunakan dalam httpd.conf yang sama, digunakan sebagai $ {var} kecuali ketika variabel tersebut digunakan dengan direktif mod_rewrite's, di mana variabel tersebut akan digunakan sebagai% {var}?
Tidak. Variabel lingkungan tidak sama dengan variabel yang ditetapkan melalui -D
atau Define
- mereka adalah konteks per permintaan yang sepenuhnya terpisah (yaitu yang sedang Anda atur SetEnvIf
), yang hanya akan digunakan oleh arahan tertentu. Mereka secara khusus disebutkan di mana didukung - di mod_rewrite mereka %{ENV:variable}
, di log mereka %{variable}e
, dan banyak arahan memiliki pemeriksaan logika yang terlihat seperti env=variable
.
Pada dasarnya; itu adalah kekacauan yang membingungkan - bukti sejarah server web selama beberapa dekade terakhir. Mungkin hal utama yang membingungkan Anda adalah bahwa sintaks mod_rewrite tidak meluas ke bagian lain dari konfigurasi dengan cara apa pun; itu semua berbeda. Poin utama untuk mengambil dari semua ini adalah bahwa tidak ada 'aturan' yang mengatur untuk membuat semua ini masuk akal - $
di satu tempat berarti sesuatu yang sama sekali berbeda dari $
di tempat lain.
Beberapa poin referensi yang berguna:
- Jika Anda ingin menetapkan variabel secara statis saat Apache dimulai, gunakan
Define
dan ${VAR}
ganti satu kali, pada startup Apache. Ini sebagian besar berguna ketika Anda ingin melakukan sesuatu seperti berbagi file konfigurasi antara pengembangan dan lingkungan produksi - tetapi itu tidak menjadi bingung dengan penggunaan $
dari RewriteMap
, yang selalu berisi a :
.
- Jika Anda ingin bekerja dengan variabel dalam permintaan tertentu, maka variabel lingkungan adalah yang Anda cari - tetapi Anda tidak dapat membuat asumsi tentang sintaksis yang akan Anda gunakan untuk mendapatkannya ketika digunakan dengan arahan tertentu. Anda harus memeriksa dokumentasi untuk arahan itu.
- Ketika mod_rewrite dipertanyakan, buang semua yang Anda tahu tentang variabel dan sintaksisnya. Ini memiliki set variabel sendiri
%{VAR}
, Anda bisa mendapatkan variabel lingkungan 'normal' dengan %{ENV:VAR}
, dan Anda dapat mengatur variabel lingkungan [E=VAR]
.