Tôi nghĩ thứ tôi cần ở đây là SetEnvIf
Nhưng, AFAIK, bạn không thể sử dụng môi trường các biến trong Tài liệuRoot
và <Directory>
chỉ thị. (Và bạn không thể Định nghĩa
các biến thành chuỗi được tính toán/động bằng cách sử dụng biểu thức chính quy.)
DocumentRoot /home/user/htdocs/${SITE}
RewriteEngine bật
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]
<Thư mục /home/user/htdocs/${SITE}>
Thay vào đó, bạn có thể định nghĩa một Tài Liệu ẢoRoot
và sử dụng một biểu thức chính quy thích hợp trong các chỉ thị mod_rewrite và <DirectoryMatch>
thùng đựng hàng.
Ví dụ: giả sử tất cả các miền của bạn có dạng <name>.<tld>
sau đó thử cách sau thay vì tập hợp con các chỉ thị ở trên:
VirtualDocumentRoot "/home/user/htdocs/%-2.0.%-1.0"
RewriteEngine bật
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,R=301,L]
<DirectoryMatch "/home/user/htdocs/[^.]+\.com">
Các %-2.0.%-1.0
một phần của Tài Liệu ẢoRoot
lệnh chụp tên miền và TLD (2 phần cuối) từ tên máy chủ được yêu cầu. Điều quan trọng là điều này không bao gồm tên miền phụ www tùy chọn (phần thứ 3 từ bên phải).
Các %1
phản hồi trong viết lại quy tắc
thay thế chuỗi tham chiếu phần tên máy chủ trừ phần tùy chọn www.
tiền tố (tên miền phụ) được ghi lại ở phần trước CondPattern. (Điều này cũng loại trừ dấu chấm trong trường hợp FQDN.)
Các <DirectoryMatch>
chỉ thị cho phép truy cập vào bất kỳ thư mục nào có dạng /home/user/htdocs/<example>.com
.
Thẩm quyền giải quyết: