Apache2 - 301 Redirect เมื่อไม่มี“ /” ที่ท้ายไดเรกทอรีใน url


13

ฉันไม่ได้สังเกตเห็น Redirect นี้ (301) จริงๆเมื่อขอ URL เช่นนี้โดยไม่ทับ ("/") ในตอนท้าย: http://server/directory

เซิร์ฟเวอร์จะ respone กับส่วนหัว 301 http://server/directory/เปลี่ยนเส้นทางถาวรกับตำแหน่งส่วนหัวของสถานที่ที่จะ

ดูตัวอย่างสดนี้:

คำขอของผู้ใช้:

GET /social HTTP/1.1
( http://192.168.1.111/social )

Apache Server การตอบกลับ:

HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/

คำขอของผู้ใช้:

GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )

Apache Server การตอบกลับ:

HTTP/1.1 200 OK

Apache access.log:

192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"

ไดเร็กทอรี / social / มีindex.htmlไฟล์

ซอฟต์แวร์ Apache: Apache/2.2.22 (Ubuntu)
ตัวเลือกไดเรกทอรี:Options Indexes FollowSymLinks MultiViews

ดังนั้นคำถามของฉันคือทำไม apache ทำเช่นนี้? และวิธีการป้องกันการเปลี่ยนเส้นทางและส่งออกindex.htmlโดยตรงหรือไม่ ลูกค้าต้องส่งคำขอสองคำขอซึ่งไม่จำเป็นจริงๆ และบางทีลูกค้าบางคนไม่อนุญาตให้มีการเปลี่ยนเส้นทางและจะไม่สามารถไปที่ไซต์ได้หากไม่มีเครื่องหมายทับ ("/")

ฉันไม่ต้องการปิดการใช้งานการเปลี่ยนเส้นทาง ฉันไม่ต้องการให้เซิร์ฟเวอร์ส่งการตอบกลับโดยตรงโดยไม่มีการเปลี่ยนเส้นทาง /socialแม้เมื่อร้องขอ

apache ถูกออกแบบมาเพื่อเปลี่ยนเส้นทางคำขอเหล่านั้นหรือไม่ เซิร์ฟเวอร์สามารถส่งข้อมูลโดยไม่เปลี่ยนเส้นทางใช่ไหม ฉันควรใช้mod_rewriteเพื่อป้องกันสิ่งนี้หรือไม่ หรือการกำหนดค่าอื่น? หรือฉันควรปล่อยให้มันเป็นอย่างนี้และเพิ่มเครื่องหมายทับที่ส่วนท้ายของลิงก์ html ทั้งหมดและใช้ชีวิตด้วยการเปลี่ยนเส้นทางบางส่วน

พวกคุณคิดอย่างไร


ฉันคิดว่าคุณจะต้องชี้แจงว่าทำไมคุณต้องการปิดการใช้งานนี้ ทางเลือกที่มีเหตุผลเพียงอย่างเดียวในการเปลี่ยนเส้นทางจะตอบสนองด้วย 404 สำหรับ/socialตัวอย่างของคุณ
Håkan Lindqvist

ฉันไม่ต้องการปิดการใช้งานเพียงป้องกันการเปลี่ยนเส้นทาง ฉันต้องการให้เซิร์ฟเวอร์แสดงผลลัพธ์index.htmlโดยไม่เปลี่ยนเส้นทาง
Jonathan Gurebo

โดย "this" ฉันอ้างถึงพฤติกรรมปกติด้วยการเปลี่ยนเส้นทางจาก URL ที่ไม่ถูกต้องไปยัง URL ที่ถูกต้อง ดูคำตอบจาก @kasperd /socialสำหรับบางส่วนของเหตุผลที่ว่าทำไมมันจะเป็นความคิดที่ดีที่จะให้บริการเนื้อหาจากเช่น (โดยทั่วไปแล้วการแสดงเนื้อหาเดียวกันในหลาย ๆ URL มักไม่ต้องการ)
Håkan Lindqvist

คำตอบ:


10

การส่งข้อมูลโดยไม่มีการเปลี่ยนเส้นทางจะทำให้ลิงก์ที่เกี่ยวข้องเสียหาย ถ้าhttp://server/directoryมีfileแล้ว URL http://server/directory/fileแบบเต็มสำหรับการที่จะเป็น ลิงก์ที่ระบุเช่น<a href="file">จะชี้ไปhttp://server/directory/fileที่ URL ฐานhttp://server/directory/แต่ถ้า URL หลักเป็นเพียงลิงก์http://server/directoryนั้นจะชี้ไปที่http://server/fileแทนซึ่งไม่ใช่ผลลัพธ์ที่ต้องการ

Apache อาจสร้างรายชื่อไดเรกทอรีได้สองวิธีขึ้นอยู่กับ URL แทนที่จะเปลี่ยนเส้นทาง อย่างไรก็ตามจะไม่ทำงานหากมีindex.htmlไฟล์อยู่ในไดเรกทอรี ดังนั้นแทน Apache ใช้วิธีการที่ทำงานในทั้งสองกรณี

นี่ไม่ใช่พฤติกรรมใหม่เมื่อหนึ่งทศวรรษที่แล้ว Apache ทำตัวเหมือนกัน ลูกค้าที่ไม่สามารถจัดการกับการเปลี่ยนเส้นทางควรได้รับการแก้ไขแล้วในขณะนี้ แต่สำหรับลูกค้าที่ไม่สามารถจัดการการเปลี่ยนเส้นทางได้ Apache ควรส่งไฟล์ html ขนาดเล็กที่มีลิงก์ที่สามารถติดตามได้แทน


นี่ไม่ได้ตอบคำถาม ถูกต้องลิงก์นั้นอาจเสียหาย แต่ถ้ามีคนต้องการส่งเนื้อหาสำหรับพา ธ ที่ไม่มีเครื่องหมายสแลชต่อท้ายพวกเขาอาจมีการดำเนินการดังกล่าวเช่นเมื่อคำขอ POST ถูกส่งไปยังเว็บเซอร์วิซ ไม่มีลิงก์ที่เกี่ยวข้องในเว็บเซอร์และการเปลี่ยนเส้นทางจะทำให้เนื้อหาของ POST หายไป
dr fu manchu

9

mod_dirเพิ่มการเปลี่ยนเส้นทางนี้และคุณสามารถปิดการใช้งานด้วยDirectorySlash Offคำสั่ง

อย่างไรก็ตามโปรดทราบว่าการปิดการใช้งานการเปลี่ยนเส้นทางสแลชต่อท้ายอาจทำให้บางหน้าเว็บหยุดทำงาน หากหน้าเว็บที่ถูกส่งกลับมีลิงค์สัมพัทธ์ URL เหล่านั้นจะแก้ไขแตกต่างกันหากหน้าเว็บนั้นแสดงผลโดยไม่มีเครื่องหมายทับต่อท้าย

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