บังคับให้ SSL และ www ใน. htaccess


12

ฉันกำลังมองหาวิธีการบังคับ SSL wwwและ

ฉันสามารถบังคับทั้งสองอย่างแยกกัน แต่ฉันก็ยังเจอกับปัญหาการเปลี่ยนเส้นทาง รหัสต่อไปนี้ใช้งานได้เมื่อจัดการ URL ในรูปแบบนี้http://example.comและเปลี่ยนเส้นทางอย่างถูกต้องhttps://www.example.comแต่เมื่อ URL ขาเข้าhttps://example.comนั้นจะไม่ถูกส่งต่อไปยังhttps://www.example.com- คำแนะนำใด ๆ

แก้ไข: มันก็ควรจะส่งไปhttp://www.example.comhttps://www.example.com

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

คำตอบ:


7

บรรทัดแรกใช้เพื่อป้องกันไม่ให้ URL ภายในถูกเขียนใหม่ นั่นอาจทำให้หน้าต่างๆแสดงขึ้นดังนั้นฉันจึงลบออก

ถ้าโฮสต์เป็นexample.comหรือไม่ได้รับการร้องขอผ่าน HTTPS https://example.com/ก็จะถูกเขียนใหม่เพื่อ คือมันเขียนใหม่http://example.com, http://www.example.comและhttps://example.comไปhttps://www.example.comในการดำเนินการอย่างใดอย่างหนึ่ง

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

เอกสารเกี่ยวกับ mod_rewrite สำหรับ Apache 2.2

หากคุณต้องการโดเมนย่อยforum.example.comกฎข้อแรกควรเป็น มิฉะนั้นคุณสามารถทำการแข่งขันแบบติดลบได้www.example.comเช่นกัน



0

ลองสิ่งนี้:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

0

คุณสามารถใช้บรรทัดต่อไปนี้ที่ฉันใช้และทำงานได้อย่างไร้ที่ติ

(ลบ RewriteCond ด้านบนออกหากคุณไม่ใช้ CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

0

เพิ่งใช้สิ่งนี้กับเว็บไซต์ของฉัน ทำงานเหมือนจับใจ! เพิ่มไว้ที่ด้านบนของไฟล์. htaccess ของฉัน เปลี่ยนเส้นทางทุกคนที่พิมพ์ www หรือไม่ใช่ www, http หรือ https

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect

0

ฉันทดสอบข้อเสนอแนะทั้งหมดที่ให้ไว้ข้างต้น แต่ไม่มีผู้ใดครอบคลุมถึงสถานการณ์ทั้งหมด

ฉันต้องการให้ผู้เยี่ยมชมทั้งหมดไปที่ https://www.example1.com/

รหัสบางอย่างที่ผู้ใช้รายอื่น ๆ ทำไว้เพื่อรับ URL ที่ไม่ปลอดภัยและ / หรือไม่ใช่ www ไปยังhttps://www.example1.com/อย่างไรก็ตามไม่มีการครอบคลุมรหัสใด ๆ ที่https://example1.comจะถูกแปลงเป็น "www" เช่นกัน

ฉันมีเว็บไซต์ของฉันโฮสต์กับ GoDaddy ในกรณีนี้จะสร้างความแตกต่าง

นี่คือรหัสที่ใช้งานได้สำหรับฉัน:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.example1\.com$ [OR]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example1.com/$1 [L,R=301]

บรรทัดสุดท้ายอาจเป็น:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

แต่ฉันใช้รหัส "301" เพื่อส่งข้อความ " ย้ายอย่างถาวร " ด้วยความหวังว่า Google และเครื่องมือค้นหาอื่น ๆ อาจอัปเดตลิงก์เก่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.