รหัสการเปลี่ยนเส้นทางสำหรับทั้งที่ไม่ใช่ www => www และอีกฝั่ง www => ที่ไม่ใช่ www ไม่มีโดเมนและสกีมฮาร์ดโค้ดในไฟล์. htaccess ดังนั้นโดเมนต้นทางและเวอร์ชัน http / https จะถูกเก็บไว้
APACHE 2.4 และใหม่กว่า
NON-WWW => WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WWW => ไม่ใช่ WWW:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [R=301,L]
หมายเหตุ: ไม่ทำงานกับ Apache 2.2 โดยที่% {REQUEST_SCHEME} ใช้ไม่ได้ เพื่อความเข้ากันได้กับ Apache 2.2 ให้ใช้รหัสด้านล่างหรือแทนที่% {REQUEST_SCHEME} ด้วย http / https แบบคงที่
APACHE 2.2 และใหม่กว่า
NON-WWW => WWW:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
... หรือรุ่นที่สั้นกว่า ...
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WWW => ไม่ใช่ WWW:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
... รุ่นที่สั้นกว่าเป็นไปไม่ได้เพราะ% N มีให้เฉพาะจาก RewriteCond ล่าสุด ...
.htaccess
วิธีการแก้ปัญหาตามฉันแนะนำคำตอบที่ถูกวางในคำถาม diametral: stackoverflow.com/a/5262044/367456