htaccess บังคับให้ https ไม่ทำงานหากไม่มี URI

Oct 03 2020

ฉันไม่เคยทำงานกับ Apache ดังนั้นฉันจึงเป็นมือใหม่

ฉันมีบัญชี multihosting บนเว็บไซต์ของผู้ให้บริการซึ่งใช้โดเมน 3 โดเมน ฉันต้องการบังคับให้เชื่อมต่อ https บนโดเมนสมมติว่าexample.comซึ่งไม่ใช่โดเมนหลักของแผนโฮสต์ สิ่งที่ฉันทำคือเพิ่ม.htaccessไฟล์ในพา ธexamplecom/public_htmlโฟลเดอร์ที่มีไฟล์ทั้งหมดของเว็บไซต์ ใน.htaccessฉันได้คัดลอกสตริงนี้จากคู่มือผู้ให้บริการ:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]

เว็บไซต์จะทำงานได้อย่างถูกต้องหากฉันไปที่หน้าที่มี URI ที่ไม่ว่างเปล่า แต่ไม่ได้อยู่ในหน้าหลัก ตัวอย่างเช่น: http://example.com/anypageถูกเปลี่ยนเส้นทางไปhttps://www.example.com/anypageยังในขณะที่http://example.com/ถูกเปลี่ยนเส้นทางไปยังhttps://www.example.com/public_htmlและไม่เข้าใจสาเหตุ

คำตอบ

3 MrWhite Oct 03 2020 at 07:24

ดูเหมือนว่าคุณอาจมีข้อขัดแย้งกับคำสั่งที่มีอยู่อย่างไรก็ตามคุณสามารถลองเปลี่ยนคำสั่งที่มีอยู่เพื่อดูว่ามันสร้างความแตกต่างได้หรือไม่:

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

การระบุ.htaccessไฟล์จะอยู่ในexamplecom/public_htmlไดเร็กทอรีดังนั้น backreference ( $1) ที่จับได้ควรมีเฉพาะสิ่งที่ตามมาเท่านั้น (ถ้ามี) ในขณะที่REQUEST_URIตัวแปรเซิร์ฟเวอร์มีเส้นทาง URL แบบเต็มเสมอ

RewriteBaseสั่งเป็นฟุ่มเฟือยที่นี่ตั้งแต่คุณกำลังใช้ URL แบบเต็มในการทดแทนRewriteRule

คุณจะต้องล้างแคชเบราว์เซอร์ของคุณก่อนทำการทดสอบเนื่องจาก 301 ที่ผิดพลาดอาจถูกแคช ทดสอบด้วยการเปลี่ยนเส้นทาง 302 (ชั่วคราว) เพื่อหลีกเลี่ยงปัญหาการแคช