Кажется, что это место для 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
Плюсы
Все эти строки, которые требуются, могут быть абстрагированы в файл сниппета для включения в одну строку в каждом местоположении
Он исправляет принудительное использование SSL и аутентификации для каждого местоположения, поэтому меньше вероятность ошибок
Минусы
Черт возьми, это едва ли интуитивно понятно!Может быть хрупким для всего, что я знаю ...
Есть ли лучший способ (не то, что я нашел ...)?
Комментарии будут очень приветствоваться, если это имеет какое-либо серьезное значениенедостатки:)
Помимо Жизнь была бы намного проще, если бы у Apache был разумный синтаксис конфигурации с общим
блок, который можно использовать где угодно.У него есть определенные блоки особого случая, такие как IfModule, и у вас есть особые условия прецедента, такие как RewriteCond (который очень трудно получить, если вы к нему не привыкли).Тим