ทำไมถึงได้ผล:
RewriteRule (.+)/$ $1
และงานนี้:
RewriteRule (.+)/$ $1 [L] #bla bla bla
แต่ไม่ได้ผล:
RewriteRule (.+)/$ $1 #bla bla bla
ทำไมถึงได้ผล:
RewriteRule (.+)/$ $1
และงานนี้:
RewriteRule (.+)/$ $1 [L] #bla bla bla
แต่ไม่ได้ผล:
RewriteRule (.+)/$ $1 #bla bla bla
คำตอบ:
กฎข้อสุดท้ายใช้ไม่ได้เพราะความคิดเห็นไม่ใช่ความคิดเห็นจริงๆ ความคิดเห็นใน htaccess ต้องขึ้นต้นด้วย#
(ต้องอยู่ที่จุดเริ่มต้นของบรรทัด) ไม่ใช่ที่ใดก็ได้โดยพลการ
ในกรณีที่สองค่า#bla bla bla
จะถูกตีความว่าเป็นพารามิเตอร์ตัวที่ 4 ของRewriteRule
คำสั่งซึ่งถูกละเว้น
ในกรณีสุดท้ายค่า#bla bla bla
จะถูกตีความเป็นพารามิเตอร์ที่ 3 ซึ่งในRewriteRule
กรณีนี้คือที่ที่แฟล็กไปและ#bla bla bla
ไม่ใช่แฟล็กใด ๆ ที่ mod_rewrite เข้าใจดังนั้นคุณจึงได้รับข้อผิดพลาด
#
จะต้องอยู่ที่ "จุดเริ่มต้น" ของบรรทัด แต่ก็สามารถนำหน้าด้วยช่องว่างจำนวนเท่าใดก็ได้ (ส่วนเกิน) ช่องว่างใน. htaccess จะถูกละเว้นและสามารถ "โรย" ได้ทุกที่รวมทั้งที่จุดเริ่มต้นของบรรทัด กล่าวอีกนัยหนึ่ง#
ต้องเป็นอักขระที่ไม่ใช่ช่องว่างตัวแรกในบรรทัด ฉันเคยคิดผิด ๆ ว่า#
จะต้องเป็นอักขระ 1 ในคอลัมน์ทางซ้ายสุด!
รูปแบบไฟล์กำหนดค่าของ Apache (ซึ่ง.htaccess
เป็นไฟล์ตัวอย่าง) ในทางเทคนิคไม่รองรับการแสดงความคิดเห็นแบบอินไลน์มีเพียงความคิดเห็นแบบเต็มบรรทัด (เช่นบรรทัดที่ขึ้นต้นด้วย a #
)
บรรทัดที่ขึ้นต้นด้วยอักขระแฮช "#" ถือเป็นความคิดเห็นและจะถูกละเว้น ความคิดเห็นต้องไม่รวมอยู่ในบรรทัดหลังจากคำสั่งการกำหนดค่า - คู่มือ Apache 2.4 อย่างเป็นทางการ
แม้ว่าแต่ละโมดูลจะต้องแยกวิเคราะห์อินพุตสำหรับคำสั่งตามที่ต้องการดังนั้นmod_rewrite
ตัดสินใจว่าจะทำอย่างไรกับบรรทัดใดก็ได้ที่ขึ้นต้นด้วยRewriteRule
ฉันไม่รู้แน่ชัด แต่การคาดเดาของฉันmod_rewrite
คือการเพิกเฉยต่อทุกสิ่งทุกอย่างหลังจาก[flags]
นั้นและ#
ไม่จำเป็นเลย
อย่างไรก็ตามทางออกที่ดีที่สุดคือการแสดงความคิดเห็นในบรรทัดของตนเองอยู่เสมอเนื่องจากจะได้ผลไม่ว่าคุณจะแสดงความคิดเห็น