Lời nói đầu
Tôi rất là một người mới về máy chủ web. Tôi đang thiết lập một máy chủ Apache2 và hiện đang xem qua tài liệu này.
Tôi nhận thấy rằng <Directory>
, <Location>
và <Files>
chỉ mỗi người đều có một tương ứng với <*Match>
chỉ thị: <DirectoryMatch>
, <LocationMatch>
và <FilesMatch>
tương ứng. Sự khác biệt trên bề mặt là đủ rõ ràng:
<*Match>
các chỉ thị lấy một biểu thức chính quy làm đối số- Các chỉ thị không khớp lấy một chuỗi đơn giản hoặc toàn cục kiểu vỏ làm đối số của chúng.
Thật kỳ lạ, các chỉ thị không khớp cũng có thể được đưa ra một biểu thức chính quy làm đối số của chúng nếu nó được đặt trước '~'. Do đó, hai dòng sau phải giống hệt nhau:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Câu hỏi
Điều tôi muốn biết là liệu có bất kỳ sự khác biệt tinh tế hay quan trọng nào để nhận thức được rằng các core
tài liệu của Apache không đề cập đến hay không. Các <DirectoryMatch>
phần không đề cập đến một sự khác biệt tinh tế:
Khả năng tương thích
Trước 2.3.9 , lệnh này được áp dụng ngầm cho các thư mục con (như
<Directory>
) và không thể khớp với ký hiệu cuối dòng ($). Trong 2.3.9 trở lên , chỉ các thư mục phù hợp với biểu thức bị ảnh hưởng bởi các chỉ thị kèm theo.
Ngoài ra, tôi muốn biết:
- Có sự khác biệt nào khác giữa các chỉ thị Trận đấu và Không khớp không?
- Lệnh nào thích hợp hơn khi cần một biểu thức chính quy?
- Bất kỳ thông tin khác bạn cảm thấy là thích hợp?
Ghi chú
<DirectoryMatch>
và<Directory "~">
ở cùng cấp độ hợp nhất- Mặc dù không được đề cập rõ ràng,
<Directory "~">
có thể sử dụng các nhóm được đặt tên và phản hồi, giống như<DirectoryMatch>
.
<Directory ~
và<DirectoryMatch
không<Directory
. Cho đến Apache 2.3.9,<Directory ~
được cho là superset vì nó hỗ trợ$
neo regex, trong khi đó<DirectoryMatch
thì không. (Điều này cũng có thể là lý do tại sao khuyến nghị sử dụngDirectoryMatch
đã bị xóa trong các tài liệu trước đó?)