htaccess บังคับให้ https ไม่ทำงานหากไม่มี URI
ฉันไม่เคยทำงานกับ 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และไม่เข้าใจสาเหตุ
คำตอบ
ดูเหมือนว่าคุณอาจมีข้อขัดแย้งกับคำสั่งที่มีอยู่อย่างไรก็ตามคุณสามารถลองเปลี่ยนคำสั่งที่มีอยู่เพื่อดูว่ามันสร้างความแตกต่างได้หรือไม่:
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 (ชั่วคราว) เพื่อหลีกเลี่ยงปัญหาการแคช