ฉันคิดว่าสิ่งที่ฉันต้องการที่นี่คือ 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.
อ้างอิง: