ฉันกำลังปกป้องไฟล์ CSV ในไดเร็กทอรีนั้น พวกเขาจะหายไปเมื่อมีการตั้งค่าคำสั่งการตรวจสอบสิทธิ์นั้น มันปรากฏขึ้นเมื่อฉันลบออก ฉันต้องการที่จะเห็นไฟล์เป็นอย่างน้อย แต่เมื่อเข้าถึงไฟล์เหล่านี้ จะมีการแจ้งเตือนให้ตรวจสอบสิทธิ์
เมื่อสร้างรายชื่อไดเร็กทอรีโดยใช้ mod_autoindex จะมีการออกคำขอย่อยภายในสำหรับแต่ละไฟล์ที่ปรากฏในรายการไดเร็กทอรี เมื่อใช้ก <FilesMatch "^(.*).csv$"> คอนเทนเนอร์ จากนั้นจะถูกประมวลผลสำหรับคำขอย่อยเหล่านี้ ดังนั้นรายการของไฟล์เหล่านี้ในรายการไดเร็กทอรีจึงถูกบล็อกด้วย
อีกทางเลือกหนึ่งของการใช้ <FilesMatch> คำสั่งคือการใช้ <If> การแสดงออกและการทดสอบกับ THE_REQUEST ตัวแปรเซิร์ฟเวอร์แทน เพียงเท่านี้ ประสบความสำเร็จ เมื่อ .csv ผู้ใช้ร้องขอไฟล์จริง ๆ ไม่ใช่เมื่อเรียกดูรายการไดเร็กทอรี
ตัวอย่างเช่น:
# ต้องเปิดใช้งานรายชื่อไดเรกทอรี (mod_autoindex)
ตัวเลือก + ดัชนี
# ป้องกันการเข้าถึงไฟล์ CSV แต่ยังคงมองเห็นได้ในรายการไดเร็กทอรี
<ถ้า "%{THE_REQUEST} =~ m#\.csv(\s|\?)#">
AuthName "ไดอะล็อกพรอมต์"
AuthType พื้นฐาน
AuthUserFile /xxxxx/ทดสอบ
ต้องการผู้ใช้ที่ถูกต้อง
</หาก>
THE_REQUEST มีบรรทัดแรกของคำขอ HTTP เช่น. รับ /foo/test.csv HTTP/1.1 (ในกรณีของคำขอ GET สำหรับ /foo/test.csv) - และไม่เปลี่ยนแปลงตลอดคำขอ ดังนั้นเมื่อร้องขอไดเร็กทอรีเอง เช่น /ฟู/ จากนั้นบล็อกที่ปิดล้อมจะไม่ถูกประมวลผล และรายการไฟล์เหล่านี้จะไม่ถูกบล็อก
ภาวะแทรกซ้อนที่เพิ่มขึ้นก็คือ THE_REQUEST มี URL ทั้งหมดตามที่ร้องขอ ซึ่งอาจรวมถึงสตริงข้อความค้นหา ดังนั้นการตรวจสอบ (\s|\?) (เช่น. ช่องว่าง หรือ ตัวอักษร ?) คือการหลีกเลี่ยงการข้ามการตรวจสอบรหัสผ่านโดยการรวมสตริงข้อความค้นหา เช่น. /foo/test.csv?anything.