Apakah ini cara menggunakan AND, OR untuk RewriteCond
di Apache?
rewritecond A [or]
rewritecond B
rewritecond C [or]
rewritecond D
RewriteRule ... something
menjadi if ( (A or B) and (C or D) ) rewrite_it
.
Jadi sepertinya "ATAU" lebih diutamakan daripada "DAN"? Apakah ada cara untuk mengetahui dengan mudah, seperti dalam (A or B) and (C or D)
sintaks?
mod-rewrite
apache-config
nonopolaritas
sumber
sumber
Jawaban:
Ini adalah pertanyaan yang menarik dan karena tidak dijelaskan secara eksplisit dalam dokumentasi, saya akan menjawabnya dengan menelusuri kode sumber mod_rewrite ; mendemonstrasikan keuntungan besar dari open-source .
Di bagian atas, Anda akan segera melihat definisi yang digunakan untuk menamai bendera ini :
dan menelusuri CONDFLAG_ORNEXT mengonfirmasi bahwa itu digunakan berdasarkan keberadaan panji [OR] :
Kemunculan flag berikutnya adalah implementasi aktual di mana Anda akan menemukan loop yang melewati semua RewriteConditions yang dimiliki RewriteRule, dan yang pada dasarnya dilakukannya adalah (dilucuti, komentar ditambahkan untuk kejelasan):
Anda harus bisa menafsirkan ini; itu berarti OR memiliki prioritas yang lebih tinggi, dan teladan Anda memang mengarah ke
if ( (A OR B) AND (C OR D) )
. Jika Anda ingin, misalnya, memiliki Ketentuan ini:itu akan diartikan sebagai
if ( (A OR B OR C) and D )
.sumber
Setelah banyak perjuangan dan untuk mencapai solusi yang umum, fleksibel dan lebih mudah dibaca, dalam kasus saya, saya akhirnya menyimpan hasil OR ke dalam variabel ENV dan melakukan DAN dari variabel tersebut.
Persyaratan :
sumber