Вопрос

Мне было интересно, можно ли настроить условное требование базовой HTTP-аутентификации на основе URL-адреса виртуального хоста в файле .htaccess.

Например, я хочу, чтобы mysite.com и test.mysite.com работали с одной и той же кодовой базой в одном каталоге, но защищали паролем test.mysite.com.Он будет настроен таким образом, чтобы мне не нужно было разветвлять мой код, поскольку код моего приложения может видеть, с какого vhost / url он обслуживается, и выбирать базу данных для обслуживания контента.

Это было полезно?

Решение

Вы можете решить эту проблему, используя mod_setenvif вместе с модулями mod_auth.Используйте директиву SetEnvIfNoCase, чтобы указать, какой хост защищен паролем.Вам понадобится пара дополнительных директив для обеспечения доступа:

Genracodicetagpre

Затем внутри блока Directory (или просто на открытом воздухе) у вас есть настройки аутентификации, примерно так:

Genracodicetagpre

Теперь о требованиях / удовлетворениях:

Genracodicetagpre

Это сделает так, что любой хост, который не соответствует ^test\.mysite\.com\.?(:80)?$, будет иметь доступ без необходимости авторизации (Allow from env=!PROTECTED_HOST), но в противном случае нам нужен действующий пользователь (Require valid-user).Код Satisfy any гарантирует, что нам нужен только один из двух: Allow или Require.

Другие советы

У меня возникли проблемы с реализацией решения Джона: Хотя я хорошо знаком с Apache conf и регулярными выражениями, аутентификация всегда срабатывала.Судя по быстрому анализу, казалось, что строка кода генерального кода не сработала.

Но я нашел другое решение, которое мне кажется более безопасным:

Я создал два виртуальных хоста для двух доменов, указывающих на один и тот же корень документа (что, кстати, полностью разрешено).В одном из vhosts я добавил директивы для базовой аутентификации (прямо в блок директив vhost).

Прекрасно работает.И я уверен, что это действительно безопасно - нет риска упустить из виду какие-либо детали в шаблоне регулярного выражения, которые откроют двери для злоумышленников.

Genracodicetagpre

Вот решение, подобное тому, что предложил Джон Лин, но с использованием кода RewriteCond для проверки имени хоста:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top