RewriteRule ^([^/]+)(/([^/]+))? หน้า.php?PAGE=$1&LINK=$3 [L]
"ปัญหา" กับสิ่งนี้คือมันจะจับคู่คำขอด้วย /จอห์นสมิ ธ
(กลุ่มที่ 2 เป็นทางเลือก) แต่เขียนคำขอใหม่เป็น หน้า.php?PAGE=john-smith&LINK=
, แทน หน้า.php?LINK=john-smith
ตามความจำเป็น. สำหรับสิ่งนี้คุณจะต้องมีกฎแยกต่างหาก ก็ยังตรงกัน /profile/john-smith/อะไร
, ทิ้ง /อะไรก็ตาม
แต่ยังคงเขียนคำขอใหม่ (ความสัมพันธ์แบบกลุ่มต่อหนึ่ง) ซึ่งอาจเปิดไซต์ของคุณให้กับผู้ส่งสแปม
สมมติว่าคุณไม่อนุญาตให้ใช้จุด (.
) ในส่วนเส้นทาง URL (ตามตัวอย่างของคุณ) คุณไม่จำเป็นต้องตรวจสอบว่าคำขอนั้นไม่ได้แมปกับไฟล์ เช่น. คำขอสำหรับ /profile/john-smith
ไม่สามารถแมปกับไฟล์ได้หากไฟล์ของคุณทั้งหมดมีนามสกุลไฟล์ ดังนั้นการตรวจสอบระบบไฟล์จึงซ้ำซ้อน
ลองทำสิ่งต่อไปนี้แทน:
# เขียนใหม่ส่วนเส้นทางเดียว
# เช่น. /john-smith ไปยัง page.php?LINK=john-smith
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)$ หน้า.php?LINK=$1 [L]
# เขียนซ้ำสองส่วนของเส้นทาง
# เช่น. /profile/john-smith ไปยัง page.php?PAGE=profile&LINK=john-smith
RewriteCond %{REQUEST_URI} !^/pages/ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/([^/.]+)$ หน้า.php?PAGE=$1&LINK=$2 [L]
เดอะ เอ็น.ซี
ปักธงไว้ก่อน เขียนซ้ำ
คำสั่งอาจซ้ำซ้อน
([^/.]+)
- ฉันได้เปลี่ยนรูปแบบย่อยการจับภาพเพื่อไม่รวมจุดด้วย และกฎข้อที่สองจะจับคู่เส้นทางสองส่วนพอดี ไม่ใช่ส่วนเดียว หรือ สองส่วนเส้นทาง ดังตัวอย่างของคุณ