ฉันต้องการเปลี่ยนของฉัน.htaccessและมีสองบรรทัดที่ฉันไม่เข้าใจ
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
เมื่อใดที่ฉันควรใช้เส้นเหล่านี้?
ฉันต้องการเปลี่ยนของฉัน.htaccessและมีสองบรรทัดที่ฉันไม่เข้าใจ
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
เมื่อใดที่ฉันควรใช้เส้นเหล่านี้?
คำตอบ:
ไม่ใช่สถานที่สำหรับการสอนที่สมบูรณ์ แต่ที่นี่สั้น ๆ
โดยทั่วไปแล้วRewriteCondหมายถึง "ดำเนินการ RewriteRule ถัดไปก็ต่อเมื่อเป็นจริง" !-lเส้นทางเป็นเงื่อนไขที่ร้องขอไม่ได้สำหรับการเชื่อมโยง ( !หมายถึงไม่ได้-lหมายถึงการเชื่อมโยง)
RewriteRuleโดยทั่วไปหมายถึงว่าถ้าคำขอจะทำว่าแมตช์^(.+)$(ตรงกับ URL ใด ๆ ยกเว้นรากเซิร์ฟเวอร์) ก็จะมีการเขียนใหม่เป็นindex.php?url=$1ซึ่งหมายความว่าขอolleจะถูกเขียนใหม่เป็นindex.php?url=olle)
QSAหมายความว่าหากมีการส่งสตริงข้อความค้นหาด้วย URL เดิมระบบจะต่อท้ายด้วยการเขียนซ้ำ( olle?p=1จะเขียนใหม่เป็นindex.php?url=olle&p=1.
L หมายความว่าหากกฎตรงกันอย่าประมวลผล RewriteRules ด้านล่างกฎนี้อีก
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้โปรดไปที่ลิงก์ด้านบน การสนับสนุนการเขียนซ้ำอาจเป็นเรื่องยากที่จะเข้าใจ แต่มีตัวอย่างบางส่วนใน stackoverflow ที่ต้องเรียนรู้
?ที่จะ&ทำให้มันเป็นไปไม่ได้ที่จะแยกแยะระหว่างVS/page&foobar /page?foobarฉันจะหยุด QSA ไม่?ให้แทนที่เป็นได้&อย่างไร
QSAย่อมาจาก Query String Append; Lย่อมาจากคำว่า last (หมายถึงดำเนินการและหยุดมองหาความบังเอิญถัดไป)
หากเงื่อนไขต่อไปนี้เป็นจริงให้เขียน URL ใหม่:
หากชื่อไฟล์ที่ร้องขอไม่ใช่ไดเร็กทอรี
RewriteCond %{REQUEST_FILENAME} !-d
และหากชื่อไฟล์ที่ร้องขอไม่ใช่ไฟล์ปกติที่มีอยู่
RewriteCond %{REQUEST_FILENAME} !-f
และหากชื่อไฟล์ที่ร้องขอไม่ใช่ลิงก์สัญลักษณ์
RewriteCond %{REQUEST_FILENAME} !-l
จากนั้นเขียน URL ใหม่ด้วยวิธีต่อไปนี้:
ใช้ชื่อไฟล์คำขอทั้งหมดและระบุเป็นค่าของพารามิเตอร์การสืบค้น "url" ไปที่ index.php ต่อท้ายสตริงการสืบค้นจาก URL เดิมเป็นพารามิเตอร์การค้นหาเพิ่มเติม (QSA) และหยุดการประมวลผลไฟล์. htaccess (L) นี้
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
ตัวอย่างอื่น:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
ด้วยแฟล็ก [QSA] การร้องขอสำหรับ
/ pages / 123? one = สอง
จะถูกจับคู่กับ
/page.php?page=123&one=two
นี้จะจับการร้องขอสำหรับไฟล์เช่นversion,
releaseและREADME.mdอื่น ๆ ซึ่งควรได้รับการปฏิบัติไม่ว่าจะเป็นจุดสิ้นสุดถ้ากำหนดไว้ (เช่นในกรณีของ / ปล่อย) หรือว่า "ไม่พบ."