ฉันมีสิ่งนี้ใน htaccess ของฉัน แต่ไม่สามารถหาได้ว่ามันมีไว้เพื่ออะไร เนื่องจากลักษณะของกฎการค้นหาจึงไม่ได้ช่วยอะไรเช่นกัน
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
ใครช่วยอธิบายหน่อยได้ไหม?
ฉันมีสิ่งนี้ใน htaccess ของฉัน แต่ไม่สามารถหาได้ว่ามันมีไว้เพื่ออะไร เนื่องจากลักษณะของกฎการค้นหาจึงไม่ได้ช่วยอะไรเช่นกัน
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
ใครช่วยอธิบายหน่อยได้ไหม?
คำตอบ:
กฎทั้งหมดนี้คือการเพิ่มการต่อท้าย/
URL ของคุณหากไม่มีและหากไม่มี.
ใน URI ดังนั้นhttps://example.org/test
จะถูกเปลี่ยนเส้นทางไปhttps://example.org/test/
แต่https://example.org/test.html
จะไม่ถูกเขียนใหม่ไปยังhttps://example.org/test.html/
(แต่หมายเหตุ: https://example.org/test.case/folder
จะไม่ถูกเปลี่ยนเส้นทางไปhttps://example.org/test.case/folder/
ตามที่มี a .
ใน URI)
## Do the following if the URI does not end with `/` or does not contain an `.`:
## the . is relevant for file names like test.html, which should n
RewriteCond %{REQUEST_URI} !(/$|\.)
## Redirect it to the original URI with an added `/` and mark this as permanent:
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
/test.case/folder
จะไม่ถูกเปลี่ยนเส้นทาง" - จุดเล็ก ๆ น้อย ๆ แต่ถ้า "โฟลเดอร์" เป็นไดเรกทอรีระบบแฟ้ม mod_dir จะออกค่าเริ่มต้น 301 ตามค่าเริ่มต้นเพื่อเปลี่ยนเครื่องหมายทับท้าย มันเป็นปัญหาถ้ามัน/test.case/some-other-virtual-url
ควรจะมีเครื่องหมายทับ
โดยไม่ต้องตรวจสอบ แต่ใช้ประสบการณ์ของฉันใน Apache เขียนใหม่การกำหนดค่านี้ดูเหมือนว่า:
ซึ่งจะส่งผลให้กรณีทดสอบต่อไปนี้
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
ดังนั้นฉันคิดว่ากฎมีจุดประสงค์ในการเพิ่มเครื่องหมายสแลชในทรัพยากรที่ดูเหมือนจะไม่เป็นไฟล์ แต่ดูเหมือนว่าจะมีตัวพิมพ์ที่เป็นขอบ
หากไม่เพิ่มเครื่องหมายทับลงในทรัพยากรด้วย '.' อักขระ (จุด) ในส่วนที่ไม่ใช่ไฟล์ของพา ธ นิพจน์ทั่วไปควรเปลี่ยนเป็น:
# match paths which do not end with a slash, or do not resemble a file with an extension
RewriteCond %{REQUEST_URI} !(/$|\.[^/]+$)
# redirect permanently to the same uri with a slash
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
!(\/$|\.[^\/]*)
- regex ที่อัปเดตของคุณไม่แตกต่างกัน คุณต้องการจุดยึดจุดสิ้นสุดของส่วนที่ 2 (ที่ตรงกับส่วนขยาย) เช่นกัน อาจจะเป็นสิ่งที่ชอบ: !(/|\.[a-zA-Z]+)$
(ไม่จำเป็นต้องหลบหลีกการทับ)
/
และมันก็ไม่ได้มี'.
"/
แล้วเปลี่ยนเส้นทางการร้องขอโดยท้ายด้วย ความตั้งใจที่น่าจะเป็นของกฎนี้คือการจัดการการจัดทำดัชนีไดเรกทอรีอัตโนมัติ