Otentikasi Apache: memungkinkan akses publik ke subdirektori

13

Ini mungkin masalah yang sederhana, tetapi saya tidak dapat menemukan solusi dalam dokumentasi.

Saya ingin kata sandi melindungi situs web saya menggunakan otentikasi BASIC. Tapi saya ingin subdirektori tidak terlindungi:

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

Saya tidak punya masalah melindungi semua situs, tetapi saya tidak tahu bagaimana saya bisa "membuka proteksi" satu direktori. Situs di-host pada host bersama, jadi saya hanya memiliki akses ke file .htaccess untuk melakukan konfigurasi.

Apakah ada arahan untuk meniadakan otentikasi?

Terima kasih untuk bantuannya ...

Guillaume
sumber
Ini tampaknya menjadi solusi yang paling benar: stackoverflow.com/questions/2641646/…
BryanK

Jawaban:

10

Seharusnya tidak menjadi masalah dengan .htaccess, tergantung pada apa yang diizinkan oleh tuan rumah.

Anda dapat mencoba meletakkan .htaccess di dalam sub-folder dengan yang berikut ini, walaupun penggantian harus diaktifkan untuk direktori di dalamnya.

 Allow From All
 Satisfy Any
Silindris
sumber
1
Saus rahasia di sini, IIRC, adalah untuk meletakkan .htaccess di root situs Anda, tetapi memiliki entri dalam file .htaccess itu seperti yang dibicarakan oleh Cylindric.
Paul Lathrop
Dan jangan lupa untuk menambahkan (atau pastikan ada) AllowOverride sehingga .htaccess akan digunakan.
TCampbell
1
@ Paul - Saya sudah menghapus jawaban saya, tetapi jawaban AFAICR Cylindric saat ini salah? File .htaccess dalam subdirektori tidak dapat menggantikan yang lebih tinggi. Namun file .htaccess di direktori induk juga dapat menyertakan kontrol (atau menghapusnya) untuk subdirektori.
Alnitak
Saya mencoba meletakkan direktif <Direktori /> di folder root dan di folder yang saya ingin publik, tetapi dalam kedua kasus saya mendapatkan HTTP 500. Ada ide lain?
Guillaume
1
Anda tidak dapat menggunakan <Direktori> dalam .htaccess, meskipun Anda dapat menggunakan <Files> dan <Lokasi>
Alnitak
7

Oke, untuk path server.com/private/public:

server.com/private/.htaccess

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

server.com/private/public/.htaccess

Allow From All
Satisfy Any

Kuncinya di sini adalah 'Satisfy Any' yang memenuhi persyaratan dari hulu bersama. 'Satisfy All' adalah default.

CK.
sumber
Terima kasih sudah menjelaskan 'Satisfy Any' 👍
Mario
1

Saya percaya ini bisa dilakukan:

# put the global auth stuff here
...

# put the override here
<Location /public>
Allow from All
Satisfy Any
</Location>
Alnitak
sumber
Tidak pernah merupakan ide yang baik untuk menggunakan <Lokasi> untuk kontrol akses. Ini hanya mengontrol akses melalui nama, bukan sumber daya itu sendiri. Dengan demikian, apa pun yang menyediakan akses ke sana melalui nama yang berbeda (Alias, misalnya) tidak memiliki kontrol akses yang diterapkan padanya.
CK.
1
@CK Sebenarnya Anda harus menggunakan Lokasi jika lokasi yang dimaksud bukan direktori fisik tetapi hanya direktori "virtual" yang disamarkan oleh sesuatu seperti mod_rewrite.
Natalie Adams 6-10
0

Saya berhasil menyelesaikan ini dengan melakukan ini:

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

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

JANGAN menggunakan Lokasi, karena mereka dibuat peka huruf besar-kecil dan tidak bertindak pada akses folder yang sebenarnya, tetapi hanya di atas URL.

Jadi, misalnya, jika saya menulis

http:/mywebsite/STUFF

atau

http://mywebsite/stuff

atau

http://mywebsite/StUfF

itu berbeda untuk kontrol Lokasi, bahkan jika direktori fisik yang dipanggil sama !!!

Singkatnya, Anda memeriksa akses untuk direktori "barang" dan saya bisa mendapatkannya secara tertulis dengan kasus yang berbeda.

Juga, menggunakan file .htaccess dalam direktori tunggal dengan kontrol lokasi pada orang lain tidak berhasil bagi saya.

Semoga ini bisa membantu.

xela92
sumber