RewriteCond ลด %{HTTPS} [หรือ]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]
คุณไม่ได้ระบุว่าเกิดอะไรขึ้นหรือโดเมนย่อยชี้ไปที่ใด ดังนั้นอาจมีปัญหาอื่นที่นี่
อย่างไรก็ตาม หากโดเมนย่อยของคุณชี้ไปยังพื้นที่เดียวกันของระบบไฟล์ (หรืออาจเป็นไดเร็กทอรีย่อย) เป็นโดเมนหลัก กฎด้านบนจะเปลี่ยนเส้นทางโดเมนย่อยทั้งหมดไปที่ www.example.com
- ดังนั้นโดเมนย่อยจึง "สูญหาย"
คุณสามารถแก้ไขปัญหานี้ได้โดยการตรวจหาเท่านั้น ทั้งนี้ขึ้นอยู่กับความต้องการของคุณ ตัวอย่าง.คอม
แทน !^www\.
และแยกการเปลี่ยนเส้นทาง HTTP เป็น HTTPS เป็นกฎของตัวเอง ตัวอย่างเช่น:
# HTTP ถึง HTTPS (รวมถึงโดเมนย่อย)
RewriteCond ลด %{HTTPS}
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Canonical ไม่ใช่ www ถึง www เปลี่ยนเส้นทางสำหรับโดเมนหลักเท่านั้น
RewriteCond %{HTTP_HOST} ^(example\.com)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
คุณจะต้องล้างแคชของเบราว์เซอร์ก่อนทำการทดสอบ (ควรทดสอบกับ 302 - ชั่วคราว - เปลี่ยนเส้นทางเพื่อหลีกเลี่ยงปัญหาการแคชที่อาจเกิดขึ้น)
อย่างไรก็ตาม คำสั่งก็ผิดลำดับเช่นกัน (ไม่เกี่ยวกับปัญหาโดเมนย่อย) การเปลี่ยนเส้นทางตามรูปแบบบัญญัติ (ด้านบน) จำเป็นต้องดำเนินการ ก่อน การเขียนใหม่ภายใน ดังนั้นของคุณ .htaccess
ควรเรียงลำดับไฟล์ดังนี้:
ดัชนีละเว้น *
RewriteEngine เปิดอยู่
ฐานการเขียนซ้ำ /
# HTTP ถึง HTTPS (รวมถึงโดเมนย่อย)
RewriteCond ลด %{HTTPS}
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Canonical ไม่ใช่ www ถึง www เปลี่ยนเส้นทางสำหรับโดเมนหลักเท่านั้น
RewriteCond %{HTTP_HOST} ^(example\.com)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
# ลบส่วนขยาย ".php" ใน URL ที่ร้องขอ
RewriteCond %{THE_REQUEST} \s/(.+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]
# คำขอเขียนใหม่ภายในเพื่อต่อท้าย ".php"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]