การพิสูจน์ตัวตน Apache: อนุญาตการเข้าถึงสาธารณะในไดเรกทอรีย่อย


13

นี่อาจเป็นปัญหาง่ายๆ แต่ฉันไม่สามารถหาวิธีแก้ปัญหาในเอกสารได้

ฉันต้องการรหัสผ่านเพื่อป้องกันเว็บไซต์ของฉันโดยใช้การตรวจสอบเบื้องต้น แต่ฉันต้องการให้ไดเรกทอรีย่อยไม่มีการป้องกัน:

http://mysite.com/ -> BASIC protected
http://mysite.com/somedir -> BASIC protected
http://mysite.com/someotherdir -> BASIC protected
http://mysite.com/public -> not protected

ฉันไม่มีปัญหาในการปกป้องไซต์ทั้งหมด แต่ฉันไม่รู้ว่าฉันจะ "ป้องกัน" ไดเรกทอรีเดียวได้อย่างไร ไซต์นี้โฮสต์บนโฮสต์ที่ใช้ร่วมกันดังนั้นฉันจึงสามารถเข้าถึงไฟล์. htaccess เพื่อทำการกำหนดค่าได้

มีคำสั่งให้ปฏิเสธการรับรองความถูกต้องหรือไม่

ขอบคุณสำหรับความช่วยเหลือ ...


นี่น่าจะเป็นทางออกที่ถูกต้องที่สุด: stackoverflow.com/questions/2641646/…
BryanK

คำตอบ:


10

ไม่ควรมีปัญหากับ. htaccess ขึ้นอยู่กับโฮสต์ที่อนุญาต

คุณสามารถลองใส่. htaccess ในโฟลเดอร์ย่อยด้วยรายการต่อไปนี้แม้ว่าการแทนที่จะต้องเปิดใช้งานสำหรับไดเรกทอรีที่อยู่ในนั้น

 Allow From All
 Satisfy Any

1
IIRC ที่เป็นความลับที่นี่คือการใส่. htaccess ไว้ที่รูทของเว็บไซต์ของคุณ แต่มีรายการในไฟล์. htaccess ที่เหมือนกับ Cylindric ที่พูดถึง
Paul Lathrop

และอย่าลืมเพิ่ม (หรือตรวจสอบให้แน่ใจว่ามี) AllowOverride ดังนั้น. htaccess จะถูกใช้
TCampbell

1
@Paul - ฉันได้ลบคำตอบของฉันแล้ว แต่คำตอบของ AFAICR Cylindric นั้นผิดหรือเปล่า? ไฟล์. htaccess ในไดเรกทอรีย่อยไม่สามารถแทนที่ไฟล์ที่สูงกว่าหนึ่งไฟล์ได้ อย่างไรก็ตามไฟล์. htaccess ในไดเรกทอรีหลักยังสามารถรวมการควบคุม (หรือลบออกจริง ๆ ) สำหรับไดเรกทอรีย่อย
Alnitak

ฉันลองทั้งวางไดเรกตอรี <Directory /> ในโฟลเดอร์ root และในโฟลเดอร์ที่ฉันต้องการให้เป็นสาธารณะ แต่ในทั้งสองกรณีฉันได้รับ HTTP 500 มีแนวคิดอื่นอีกไหม?
Guillaume

1
คุณไม่สามารถใช้ <ไดเรกทอรี> ใน .htaccess ถึงแม้ว่าคุณจะสามารถใช้ <ไฟล์> และ <สถานที่>
Alnitak

7

ตกลงสำหรับเส้นทางเซิร์ฟเวอร์.com/private/public:

server.com/private/.htaccess

AuthType Basic
AuthName "Private, keep out."
Require...

server.com/private/public/.htaccess

Allow From All
Satisfy Any

กุญแจสำคัญที่นี่คือ 'ตอบสนองใด ๆ ' ซึ่ง OR ข้อกำหนดจากต้นน้ำด้วยกัน 'พอใจทั้งหมด' เป็นค่าเริ่มต้น


ขอบคุณสำหรับการอธิบาย 'Satisfy Any' 👍
Mario

1

ฉันเชื่อว่านี่อาจทำ:

# put the global auth stuff here
...

# put the override here
<Location /public>
Allow from All
Satisfy Any
</Location>

ไม่ควรใช้ <Location> เพื่อการควบคุมการเข้าถึง มันควบคุมการเข้าถึงผ่านชื่อแทนที่จะใช้ทรัพยากรเอง ดังนั้นสิ่งใดก็ตามที่ให้การเข้าถึงผ่านชื่ออื่น (ตัวอย่างเช่นนามแฝง) จึงไม่มีการควบคุมการเข้าถึงที่ใช้กับมัน
CK

1
@CK จริง ๆ แล้วคุณต้องใช้ตำแหน่งหากสถานที่ที่สงสัยไม่ใช่ไดเรกทอรีทางกายภาพ แต่เป็นเพียงไดเรกทอรี "เสมือน" ที่ปลอมแปลงโดยบางสิ่งเช่น mod_rewrite
Natalie Adams

0

ฉันพยายามที่จะแก้ปัญหานี้ทำสิ่งนี้:

<Directory "/path/to/maindirectory">
[... auth stuff ... ]
</Directory>

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
</Directory>

อย่าใช้สถานที่เพราะพวกเขาจะต้องตรงตามตัวพิมพ์ใหญ่ - เล็กและพวกเขาไม่ได้ทำในการเข้าถึงโฟลเดอร์จริง แต่เพียงผ่าน URL

ตัวอย่างเช่นถ้าฉันเขียน

http:/mywebsite/STUFF

หรือ

http://mywebsite/stuff

หรือ

http://mywebsite/StUfF

มันแตกต่างจากการควบคุมตำแหน่งแม้ว่าไดเรกทอรีทางกายภาพที่เรียกว่าเหมือนกัน !!!

ในระยะสั้นคุณตรวจสอบการเข้าถึงไดเรกทอรี "สิ่ง" และฉันสามารถเขียนเป็นกรณีอื่น

นอกจากนี้การใช้ไฟล์. htaccess ในไดเรกทอรีเดียวที่มีการควบคุมตำแหน่งในที่อื่น ๆ ก็ไม่ได้ผลสำหรับฉัน

หวังว่ามันจะช่วย

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