Apache 2.2 перенаправляет на SSL *, затем * выполните аутентификацию (с решением <, но это чушь?)

Кажется, это место для 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 (который очень трудно понять, если вы к нему не привыкли).

Ура,

Тим

7
задан Tim Watts 23 June 2011 в 17:47
поделиться