Score:3

.htaccess - ยกเว้นโฟลเดอร์จากการป้องกันการรับรองความถูกต้องขั้นพื้นฐาน

ธง id

ฉันมีเว็บไซต์ที่ไม่มีใครได้รับอนุญาตให้เข้าโดยไม่ต้องป้อนข้อมูลรับรองความถูกต้องพื้นฐาน

อย่างไรก็ตาม ฉันต้องการให้ทุกคนเข้าถึงโฟลเดอร์มีเดียได้ เนื่องจากเรากำลังใช้ส่วนขยายของบุคคลที่สามซึ่งสร้าง PDF และเราสามารถทดสอบได้อย่างเต็มที่หากสื่อสามารถเข้าถึงได้เท่านั้น

โฟลเดอร์มีเดียอยู่ที่ /var/www/company/pub/media.

โดเมน (www.example.com) ชี้ไปที่ /var/www/company/pub, ดังนั้น ผับ โฟลเดอร์เป็นจุดเริ่มต้น

นี่คือความพยายาม .htaccess ของฉัน (/var/www/company/.htaccess):

RewriteEngine เปิดอยู่
RewriteCond %{REQUEST_URI} !^/pub/
RewriteCond %{REQUEST_URI} !^/setup/
RewriteCond %{REQUEST_URI} !^/update/
RewriteCond %{REQUEST_URI} !^/dev/
RewriteRule .* /pub/$0 [L]
DirectoryIndex index.php

AuthType พื้นฐาน
AuthName "ป้องกัน"
AuthUserFile "/var/www/company/.htpasswd"

# ไม่รวมโฟลเดอร์มีเดียจากการรับรองความถูกต้องพื้นฐาน
สื่อ SetEnvIf Request_URI "^/media/*"

คำสั่งอนุญาตปฏิเสธ
ต้องการผู้ใช้ที่ถูกต้อง
อนุญาตจาก env=media
ปฏิเสธจาก env=!media
พอใจใด ๆ

แต่ถ้าลองโทร http://www.example.com/media/someimage.jpg จากนั้นฉันยังคงได้รับพรอมต์การเข้าสู่ระบบ auth พื้นฐาน

สิ่งแวดล้อม:

อาปาเช่ 2.4.41 (อูบุนตู)

Score:5
ธง in

วางไฟล์ .htaccess ในโฟลเดอร์มีเดียด้วย AuthType ไม่มี.

AuthType ไม่มี
ต้องได้รับอนุญาตทั้งหมด
Black avatar
id flag
ทำงานเหมือนจับใจ ขอบคุณ!
Score:1
ธง kz
# ไม่รวมโฟลเดอร์มีเดียจากการรับรองความถูกต้องพื้นฐาน
สื่อ SetEnvIf Request_URI "^/media/*"

คำสั่งอนุญาตปฏิเสธ
ต้องการผู้ใช้ที่ถูกต้อง
อนุญาตจาก env=media
ปฏิเสธจาก env=!media
พอใจใด ๆ

สิ่งนี้จะใช้งานได้ ยกเว้น regex ผิดใน ตั้งค่าEnvIf คำสั่ง ดังนั้น env var สื่อ ไม่ได้ตั้งค่าเมื่อมีการร้องขอ /media/someimage.jpg. คุณขาดจุดก่อนหน้า * ปริมาณเช่น ^/สื่อ/.*. อย่างไรก็ตาม คุณสามารถลบส่วนท้ายออกได้ * ทั้งสิ้น กล่าวคือ ^/สื่อ/ซึ่งมีประสิทธิภาพเหมือนกัน (และมีประสิทธิภาพมากขึ้น)

เดอะ ปฏิเสธจาก env=!media คำสั่งนั้นไม่จำเป็น

ดังนั้นสิ่งต่อไปนี้ควรใช้งานได้:

# ไม่รวมโฟลเดอร์มีเดียจากการรับรองความถูกต้องพื้นฐาน
สื่อ SetEnvIf Request_URI "^/media/"

ต้องการผู้ใช้ที่ถูกต้อง
 
คำสั่งอนุญาตปฏิเสธ
อนุญาตจาก env=media
ตอบสนองใด ๆ

อย่างไรก็ตาม นี่เป็นการใช้คำสั่ง Apache 2.2 ที่เลิกใช้แล้ว ใน Apache 2.4 คุณสามารถทำสิ่งต่อไปนี้แทน:

# ไม่รวมโฟลเดอร์มีเดียจากการรับรองความถูกต้องพื้นฐาน
สื่อ SetEnvIf Request_URI "^/media/"

ต้องการผู้ใช้ที่ถูกต้อง
ต้องการสื่อ env

เดอะ ค่าเริ่มต้น คอนเทนเนอร์คือ <RequireAny> - ดังนั้นคุณไม่จำเป็นต้องรวมสิ่งนี้ แม้ว่าคุณสามารถระบุได้หากต้องการ:

<RequireAny>
    Require valid-user
    Require env media
</RequireAny>

หรือคุณสามารถล้อมรอบบล็อกการให้สิทธิ์ทั้งหมดในไฟล์ <If> การแสดงออก. ตัวอย่างเช่น:

# รหัสผ่านป้องกันทุกอย่างยกเว้นไดเร็กทอรีย่อย "/media/"
<ถ้า "%{REQUEST_URI} !~ m#^/media/#">
    AuthType พื้นฐาน
    AuthName "ป้องกัน"
    AuthUserFile "/var/www/company/.htpasswd"
    ต้องการผู้ใช้ที่ถูกต้อง
</หาก>

ผู้ดำเนินการ !~ เป็นการจับคู่นิพจน์ทั่วไปที่เป็นค่าลบ

Black avatar
id flag
ดี ฉันลองแล้วและทุกอย่างได้ผล ฉันยอมรับคำตอบของคุณแทน เนื่องจากมีรายละเอียดที่เป็นประโยชน์มากกว่าและแสดงสาเหตุที่ความพยายามของฉันล้มเหลว

โพสต์คำตอบ

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