Апач-аутентификация: разрешить публичный доступ к подкаталогу


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.
Пол Латроп

И не забудьте добавить (или убедиться, что существует) AllowOverride, чтобы был использован .htaccess.
TCampbell

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

Я попытался поместить директиву <Directory /> в корневую папку и в папку, которую я хочу сделать общедоступной, но в обоих случаях я получаю HTTP 500. Есть еще идеи?
Гийом

1
Вы не можете использовать <Directory> в .htaccess, хотя вы можете использовать <Files> и <Location>
Alnitak

7

ОК, для пути 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

Ключевым моментом здесь является «Удовлетворить кого-либо», который ИЛИ отвечает требованиям, исходящим вместе. «Удовлетворить все» по умолчанию.


Спасибо за объяснение «Удовлетворить любого» Mar
Марио

1

Я считаю, что это может сделать это:

# put the global auth stuff here
...

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

Никогда не стоит использовать <Location> для контроля доступа. Он контролирует доступ только через имя, а не сам ресурс. Таким образом, все, что обеспечивает доступ к нему через другое имя (например, псевдоним), к нему не применяется контроль доступа.
СК.

1
@CK На самом деле вы должны использовать Location, если рассматриваемое местоположение не является физическим каталогом, а является просто «виртуальным» каталогом, замаскированным чем-то вроде mod_rewrite.
Натали Адамс

0

Мне удалось решить это с помощью этого:

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

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

НЕ используйте Locations, потому что они сделаны с учетом регистра, и они не влияют на фактический доступ к папке, а только на URL.

Так, например, если я напишу

http:/mywebsite/STUFF

или

http://mywebsite/stuff

или

http://mywebsite/StUfF

это отличается для контроля местоположения, даже если физический каталог называется один и тот же !!!

Короче говоря, вы проверяете доступ к каталогу "вещи", и я могу написать в другом случае.

Кроме того, использование файла .htaccess в одном каталоге с контролем местоположения в других мне не помогло.

Надеюсь, это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.