Кажется, это место для apache, так что вот оно:)
Давняя проблема: как я перенаправляю HTTP-> HTTPS , тогда и только если HTTPS, сделать авторизацию?
О -и я бы хотел, чтобы большая часть этого была в одном фрагменте, который можно было бы включить в несколько блоков
Что ж, вот что у меня есть это, похоже, работает:
В верхней части блока VirtualHost
# Set ssl_off environment variable
RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteRule ^ - [E=ssl]
В блоке местоположения или каталога
RewriteEngine on
# Case 1 redirect port 80 SSL
RewriteCond %{HTTPS} !=on
RewriteCond %{SERVER_PORT} =80
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
AuthType Basic
AuthBasicProvider external
AuthExternal auth_pam
AuthName "My Underpants"
AuthzUnixgroup on
Order Deny,Allow
Deny from all
Allow from env=!ssl
Satisfy any
Require group nice-users
Плюсы
Вся эта панель Require может быть абстрагирована в файл сниппета для включения в один строка для каждого местоположения
Он исправляет принудительное использование SSL и аутентификации вместе для каждого местоположения, поэтому меньше вероятность ошибок
Минусы
Черт побери, это вряд ли интуитивно понятно! Может быть, насколько я знаю ...
Есть ли лучший способ (не то, что я нашел ...)?
Мы будем очень приветствовать комментарии о том, есть ли у него какие-либо серьезные недостатки:)
Помимо Жизнь была бы намного проще, если бы Apache имел разумный синтаксис конфигурации с общим блоком
, который можно было бы использовать где угодно. В нем есть определенные блоки специального случая, такие как IfModule, а также условные выражения особого случая, такие как RewriteCond (который очень трудно понять, если вы к нему не привыкли).
Ура,
Тим