ฉันมี ELB ซึ่งในตอนแรกถูกกำหนดให้ส่งต่อในลักษณะนี้:

Protocal    Port    Forward-Protocol    Port
Http         80          Http            80
Protocal    Port    Forward-Protocol    Port
Https        443         Https           443

เนื่องจากฉันเพิ่มใบรับรอง SSL ของฉันใน ELB และอินสแตนซ์ EC2 ของฉันอยู่ในซับเน็ตส่วนตัว วิศวกรฝ่ายสนับสนุนของ AWS แนะนำให้เปลี่ยน https เพื่อส่งต่อเป็น http ดังนี้:

Protocal    Port    Forward-Protocol    Port
Http         80          Http            80
Protocal    Port    Forward-Protocol    Port
Https        443         Http            80

เขากล่าวว่าเป็นแนวปฏิบัติที่ดีกว่าเนื่องจาก ELB ทำทุกอย่างที่จำเป็นใน Https แล้ว ไม่มีเหตุผลที่จะเพิ่มโอเวอร์เฮดให้กับอินสแตนซ์ของฉันเช่นกัน

ปัญหาคือในอินสแตนซ์ EC2 ของฉัน โครงสร้างโฟลเดอร์ของฉันคือ:

  • /var/www/html - สำหรับคำขอ http ปกติ
  • /var/www/secure - สำหรับคำขอ https ที่ปลอดภัย

ฉันต้องการบังคับให้ไซต์ของฉันทำเฉพาะคำขอ Https ดังนั้นฉันต้องการใช้รหัสนี้ใน *.80 Virtual ของฉัน:

<VirtualHost *:80>
...
#Force the https
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} https
#Here i need a rule to change the document root.
...
</VirtualHost>

ปัญหาของฉันเกี่ยวกับรหัสนี้คือมันจะโอนคำขอไปยัง https ในขณะที่สิ่งที่ฉันต้องการคือเปลี่ยนรูทเอกสารเมื่อเป็น https

ฉันสามารถสันนิษฐานได้ว่าถ้ามันไปที่ http ด้วยการส่งต่อไปยัง https - การเชื่อมต่อนั้นปลอดภัยแล้ว

answer

ด้วยกฎการเขียนใหม่ การรับส่งข้อมูลทั้งหมดจะปลอดภัย ดังนั้นจึงไม่จำเป็นต้องใช้ไฟล์ในโฟลเดอร์ที่ไม่ปลอดภัย

ฉันจะลบโฟลเดอร์ html ที่มีอยู่และเปลี่ยนชื่อโฟลเดอร์ 'ปลอดภัย' เป็น 'html'