Score:1

การรวม VirtualHosts จำนวนมากไว้ในบล็อกเดียว นี่คืองานสำหรับ SetEnvIf หรือไม่

ธง dj

แก้ไข ฉันคิดว่าสิ่งที่ฉันต้องการนี่คือ ตั้งค่าEnvIf

ฉันกำลังพยายามรวมพอร์ต-80 VirtualHosts ทั้งหมดของฉันไว้ในบล็อกเดียวเพื่อความสะดวก แต่ฉันกำลังดิ้นรนกับปริศนาชิ้นสุดท้าย

พอร์ต 80 vhost ทั้งหมดยอมรับ www และ ไม่ใช่ www การเชื่อมต่อกับ /.well-known/acme-challenge/. คำขออื่นๆ ทั้งหมด 301 ถึง https://example.com/ - ไม่มี www.

ฉันคิดว่าฉันต้องเลี้ยว %{HTTP_HOST} เป็น กำหนดตัวแปรได้ ลบ "www" ที่เป็นไปได้, เช่น. ${SITE}.

หรืออาจจะมีวิธีที่ดีกว่า?

นี่คือที่ที่ฉันอยู่:

<VirtualHost ${IP1}:80>
    Define SITE hmmm
    ServerName example-1.com
    ServerAlias www.example-1.com
    ServerAlias example-2.com
    ServerAlias www.example-2.com
    # And so on... 25 vhosts
    DocumentRoot /home/user/htdocs/${SITE}

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]

    <Directory /home/user/htdocs/${SITE}>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
Score:1
ธง kz

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

อ้างอิง:

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา