ฉันคิดว่าสิ่งที่ฉันต้องการที่นี่คือ SetEnvIf
แต่ AFAIK คุณใช้ไม่ได้ สิ่งแวดล้อม ตัวแปรใน DocumentRoot
และ <Directory>
คำสั่ง (และคุณไม่สามารถ กำหนด
ตัวแปรเป็นสตริงที่คำนวณ/ไดนามิกโดยใช้ regex)
DocumentRoot /home/user/htdocs/${SITE}
RewriteEngine เปิดอยู่
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]
<ไดเรกทอรี /home/user/htdocs/${SITE}>
คุณสามารถกำหนดแทน VirtualDocumentRoot
และใช้ regex ที่เหมาะสมในคำสั่ง mod_rewrite และ <DirectoryMatch>
คอนเทนเนอร์.
ตัวอย่างเช่น สมมติว่าโดเมนทั้งหมดของคุณอยู่ในรูปแบบ <name>.<tld>
จากนั้นลองทำสิ่งต่อไปนี้แทนชุดย่อยของคำสั่งด้านบน:
VirtualDocumentRoot "/home/user/htdocs/%-2.0.%-1.0"
RewriteEngine เปิดอยู่
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">
เดอะ %-2.0.%-1.0
ส่วนหนึ่งของ VirtualDocumentRoot
คำสั่งจับชื่อโดเมนและ TLD (2 ส่วนสุดท้าย) จากชื่อโฮสต์ที่ร้องขอ ที่สำคัญ สิ่งนี้ไม่รวมโดเมนย่อย www (ส่วนที่ 3 จากขวา) ซึ่งเป็นทางเลือก
เดอะ %1
การอ้างอิงย้อนกลับใน เขียนกฎใหม่
การแทน สตริงอ้างอิงถึงส่วนของชื่อโฮสต์น้อยกว่าตัวเลือก www.
คำนำหน้า (โดเมนย่อย) ถูกจับในส่วนก่อนหน้า CondPattern. (ซึ่งไม่รวมจุดต่อท้ายในกรณีของ FQDN)
เดอะ <DirectoryMatch>
คำสั่งอนุญาตให้เข้าถึงไดเร็กทอรีใด ๆ ที่อยู่ในรูปแบบ /home/user/htdocs/<example>.com
.
อ้างอิง: