$ 1 [QSA, L] ในไฟล์. htaccess ของฉันหมายความว่าอย่างไร


99

ฉันต้องการเปลี่ยนของฉัน.htaccessและมีสองบรรทัดที่ฉันไม่เข้าใจ

RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

เมื่อใดที่ฉันควรใช้เส้นเหล่านี้?



คำตอบ:


217

ไม่ใช่สถานที่สำหรับการสอนที่สมบูรณ์ แต่ที่นี่สั้น ๆ

โดยทั่วไปแล้ว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 ที่ต้องเรียนรู้


QSA แทนที่?ที่จะ&ทำให้มันเป็นไปไม่ได้ที่จะแยกแยะระหว่างVS/page&foobar /page?foobarฉันจะหยุด QSA ไม่?ให้แทนที่เป็นได้&อย่างไร
Pacerier

1
ฉันเชื่อว่าจะจำสิ่งเหล่านั้นทั้งหมดที่คุณสามารถสร้างการเชื่อมโยงได้เช่นQSAย่อมาจาก Query String Append; Lย่อมาจากคำว่า last (หมายถึงดำเนินการและหยุดมองหาความบังเอิญถัดไป)
Skylark Roman

8

หากเงื่อนไขต่อไปนี้เป็นจริงให้เขียน 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]

เอกสาร Apache #flag_qsa

ตัวอย่างอื่น:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

ด้วยแฟล็ก [QSA] การร้องขอสำหรับ

/ pages / 123? one = สอง

จะถูกจับคู่กับ

/page.php?page=123&one=two


0

นี้จะจับการร้องขอสำหรับไฟล์เช่นversion, releaseและREADME.mdอื่น ๆ ซึ่งควรได้รับการปฏิบัติไม่ว่าจะเป็นจุดสิ้นสุดถ้ากำหนดไว้ (เช่นในกรณีของ / ปล่อย) หรือว่า "ไม่พบ."

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.