Apache kimlik doğrulaması: bir alt dizine genel erişime izin ver


13

Bu muhtemelen basit bir sorundur, ancak çözümü belgelerde bulamıyorum.

BASIC kimlik doğrulamasını kullanarak web sitemi şifre ile korumak istiyorum. Ancak bir alt dizinin korunmamasını istiyorum:

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

Tüm siteyi korumakta sorunum yok, ama bir dizini nasıl "korumayı" kaldıracağımı bilmiyorum. Site paylaşılan bir ana bilgisayarda barındırılıyor, bu yüzden yapılandırmayı yapmak için yalnızca .htaccess dosyalarına erişimim var.

Doğrulamayı reddetmek için bir direktif var mı?

Yardım için teşekkürler ...


Bu en doğru çözüm gibi görünüyor: stackoverflow.com/questions/2641646/…
BryanK

Yanıtlar:


10

Ev sahibinin neye izin verdiğine bağlı olarak .htaccess ile ilgili bir sorun olmamalıdır.

Alt klasöre geçersiz kılınan dizinler için etkinleştirilmesi gerekse de, alt klasöre bir .htaccess koymayı deneyebilirsiniz.

 Allow From All
 Satisfy Any

1
Buradaki gizli sos, IIRC, .htaccess'i sitenizin köküne koymaktır, ancak bu .htaccess dosyasında bir Silindirik hakkında konuştuğu gibi bir girişe sahip olmaktır.
Paul Lathrop

.Htaccess'in kullanılması için bir AllowOverride eklemeyi (veya var olduğundan emin olun) unutmayın.
TCampbell

1
@Paul - Cevabımı sildim, ancak AFAICR Cylindric'in cevabı şu anda yanlış mı? Bir alt dizindeki bir .htaccess dosyası bir üst değeri geçersiz kılamaz. Ancak, üst dizindeki .htaccess dosyası, alt dizinler için denetimler de içerebilir (veya bunları kaldırabilir).
Alnitak

Hem kök klasöre hem de genel olmasını istediğim klasöre bir <Directory /> yönergesi koymayı denedim, ancak her iki durumda da bir HTTP 500 alıyorum.
Guillaume

1
<Dosya> ve <Konum> kullanabileceğiniz halde <Directory> öğesini .htaccess içinde kullanamazsınız
Alnitak

7

Tamam, bir yol server.com/private/public için:

server.com/private/.htaccess

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

server.com/private/public/.htaccess

Allow From All
Satisfy Any

Buradaki anahtar, gereksinimleri yukarı akıştan VEYA birlikte sunan 'Herhangi birini tatmin et'. 'Tümünü Karşıya' varsayılan değerdir.


'Satisfy Any' 👍
Mario

1

Bunun yapabileceğini düşünüyorum:

# put the global auth stuff here
...

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

Erişim kontrolü için <Konum> 'ları kullanmak asla iyi bir fikir değildir. Erişimi, kaynağın kendisi yerine yalnızca bir ad aracılığıyla denetler. Bu nedenle, farklı bir adla (örneğin Takma ad) ona erişim sağlayan herhangi bir şeyin kendisine uygulanan erişim kontrolü yoktur.
CK.

1
@CK Aslında söz konusu konum fiziksel bir dizin değilse, sadece mod_rewrite gibi bir şeyle gizlenmiş bir "sanal" dizinse Konum'u kullanmalısınız.
Natalie Adams

0

Bunu yaparak bunu çözmeyi başardım:

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

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

Konumları KULLANMAYIN, çünkü büyük / küçük harfe duyarlı hale getirilmiştir ve gerçek klasör erişimine göre değil, sadece URL üzerinden hareket ederler.

Örneğin, eğer yazarsam

http:/mywebsite/STUFF

veya

http://mywebsite/stuff

veya

http://mywebsite/StUfF

çağrılan fiziksel dizin aynı olsa bile, Konum kontrolü için farklı !!!

Kısacası, "şeyler" dizini için erişim kontrol ve ben farklı bir durumda yazarak alabilirsiniz.

Ayrıca, .htaccess dosyasını başkaları üzerinde konum kontrolü ile tek bir dizinde kullanmak bana işe yaramadı.

Umarım yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.