Kata pengantar
Saya sangat baru tentang webservers. Saya sedang menyiapkan server Apache2 dan saat ini sedang meneliti dokumentasi.
Saya melihat bahwa <Directory>
, <Location>
, dan <Files>
arahan masing-masing memiliki sesuai <*Match>
direktif: <DirectoryMatch>
, <LocationMatch>
dan <FilesMatch>
masing-masing. Perbedaan pada permukaan cukup jelas:
<*Match>
arahan mengambil ekspresi reguler sebagai argumen- Arahan Non-Match mengambil argumen string atau globe-style-shell sebagai argumen mereka.
Anehnya, arahan non-Match juga dapat diberikan ekspresi reguler sebagai argumen mereka jika didahului oleh '~'. Dengan demikian, dua baris berikut harus identik:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Pertanyaan
Yang ingin saya ketahui adalah apakah ada perbedaan halus atau penting yang perlu diperhatikan bahwa dokumen Apachecore
tidak disebutkan. The <DirectoryMatch>
bagian tidak menyebutkan satu perbedaan halus:
Kesesuaian
Sebelum 2.3.9 , arahan ini secara implisit diterapkan pada sub-direktori (seperti
<Directory>
) dan tidak dapat cocok dengan simbol garis akhir ($). Pada 2.3.9 dan yang lebih baru , hanya direktori yang cocok dengan ekspresi yang dipengaruhi oleh arahan terlampir.
Selain itu, saya ingin tahu:
- Apakah ada perbedaan lain antara arahan Match dan non-Match?
- Arahan mana yang lebih disukai ketika ekspresi reguler diperlukan?
- Adakah informasi lain yang Anda rasa relevan?
Catatan
<DirectoryMatch>
dan<Directory "~">
berada pada level gabungan yang sama- Meskipun tidak disebutkan secara eksplisit,
<Directory "~">
dapat menggunakan grup dan referensi yang bernama, seperti<DirectoryMatch>
.
<Directory ~
dan<DirectoryMatch
, tidak<Directory
. Sampai Apache 2.3.9,<Directory ~
bisa dibilang superset karena mendukung$
jangkar regex, sedangkan<DirectoryMatch
tidak. (Ini mungkin juga mengapa rekomendasi untuk menggunakanDirectoryMatch
dihapus dalam dokumen sebelumnya?)