กฎของคุณอยู่ในลำดับที่ไม่ถูกต้อง การเปลี่ยนเส้นทางที่ไม่ใช่ www ไปยัง www ภายนอกของคุณต้องอยู่ก่อนการเขียนใหม่ภายในทันทีหลังจากครั้งแรก RewriteBase
คำสั่ง
ตามกฎทั่วไป "การเปลี่ยนเส้นทาง" ควรมาก่อน "เขียนใหม่" เสมอ
อัปเดต: คุณจะต้องแน่ใจว่าคุณได้ล้างแคชของเบราว์เซอร์ (และแคชตัวกลางใดๆ) เนื่องจากการเปลี่ยนเส้นทาง 301 (ถาวร) ที่ผิดพลาดจะถูกแคชโดยเบราว์เซอร์อย่างแน่นอน
โดยสรุป กฎของคุณควรมีลักษณะดังนี้:
RewriteEngine เปิดอยู่
ฐานการเขียนซ้ำ /
# เปลี่ยนเส้นทางที่ไม่ใช่ www เป็น www
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
# เขียนใหม่ภายในสำหรับหน้า
RewriteRule ^([-a-zA-Z0-9]+)$ index.php?page=$1 [L]
จุดตามตัวอักษรใดๆ ใน regex จะต้องเป็นเครื่องหมายแบ็กสแลช และคุณควรรวม แอล
ตั้งค่าสถานะในการเขียนใหม่ คุณควรเพิ่มกฎเพิ่มเติมในภายหลัง
(หมายเหตุ: ฉันคิดว่าคุณกำลังเชื่อมโยงไปยัง URL ของแบบฟอร์ม /นี่คือหน้าของฉัน
และไม่ /index.php?page=this-is-my-page
- มิฉะนั้น คุณต้องเปลี่ยนลิงค์ภายในของคุณ)