Аутентифікація Apache: надати доступ громадськості до підкаталогу


13

Це, мабуть, проста проблема, але я не можу знайти рішення в документації.

Я хочу захистити паролем свій веб-сайт за допомогою автентифікації BASIC. Але я хочу, щоб підкаталог не захищений:

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-файлі, як той, про який говорить циліндрик.
Пол Летроп

І не забудьте додати (або переконайтесь, що існує) AllowOverride, щоб використовуватись .htaccess.
TCampbell

1
@Paul - Я видалив свою відповідь, але відповідь AFAICR Cylindric наразі невірна? Файл .htaccess у підкаталозі не може змінити один вище. Однак файл .htaccess у батьківському каталозі також може включати елементи керування (або дійсно видаляти їх) для підкаталогів.
Альнітак

Я спробував ввести директиву <Каталог /> в кореневу папку та в папку, яку я хочу бути загальнодоступною, але в обох випадках я отримую HTTP 500. Будь-які інші ідеї?
Гійом

1
Ви не можете використовувати <Directory> в .htaccess, хоча ви можете використовувати <Files> і <Location>
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

Ключовим тут є "Задовольнити будь-який", який АБО вимоги з вище за течією. Типово "Задовольнити всіх".


Thx для пояснення "Задовольнити будь-яке" 👍
Маріо

1

Я вважаю, що це може зробити це:

# put the global auth stuff here
...

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

Ніколи не годиться використовувати <Location> s для контролю доступу. Він контролює доступ лише через ім'я, а не сам ресурс. Таким чином, все, що забезпечує доступ до нього через інше ім’я (наприклад, псевдонім), не має до нього застосованого контролю доступу.
СК.

1
@CK Насправді ви повинні використовувати Location, якщо відповідне місце розташування не є фізичним каталогом, а лише "віртуальним" каталогом у маскуванні чимось на зразок mod_rewrite.
Наталі Адамс

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 в одному каталозі з керуванням місцеположенням для інших мені не працювало.

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.