ฉันต้องการเปลี่ยนของฉัน.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
อื่น ๆ ซึ่งควรได้รับการปฏิบัติไม่ว่าจะเป็นจุดสิ้นสุดถ้ากำหนดไว้ (เช่นในกรณีของ / ปล่อย) หรือว่า "ไม่พบ."