Я пытаюсь заставить конкретный каталог требовать только разрешенные IP-адреса и действительное имя пользователя / пароль с помощью базовой авторизации. Чтобы гарантировать, что имя пользователя / пароль отправляются в зашифрованном виде, я хочу, чтобы каталог также принудительно использовал SSL. Вот что у меня в файле .htaccess:
# Force HTTPS-Connection
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://www.mywebsite.com%{REQUEST_URI} [R,L]
## password begin ##
AuthName "Restricted Access"
AuthUserFile /var/www/admin/.htpasswd
AuthType Basic
Require valid-user
Order deny,allow
Deny from all
Allow from 79.1.231.151 62.123.134.83
Satisfy All
К сожалению, когда я обращаюсь к этому каталогу по протоколу http, он запрашивает пароль перед перенаправлением страницы на безопасную версию. Это означает, что пароль отправляется в незашифрованном виде. Что я делаю не так? Есть ли способ сделать это?
Перезапись и перенаправление обрабатываются после авторизации. Однако: сначала рассматриваются псевдонимы в вашем httpd.conf.
Итак, что я сделал, чтобы отправить свой http: // servername / webmail на https: //webmail.servername нужно было поместить его в httpd.conf следующим образом:
<IfModule alias_module>
Redirect permanent /webmail https://webmail.servername
</IfModule>
Базовая авторизация может остаться в вашем .htaccess и будет выполнена только один раз ПОСЛЕ выполнения перенаправления ...
Попробуйте поставить SSLRequireSSL в вашем файле .htaccess или в глобальной конфигурации Apache httpd.
Если у вас есть доступ к конфигурации Apache, добавьте раздел аутентификации в VirtualHost
с включенным SSL. Тогда перенаправление всегда будет происходить первым.
Кроме того, используя mod_rewrite
выполнить простое перенаправление - это немного излишне. Использовать Перенаправить вместо этого директива. Возможно, это даже решит вашу проблему, как я считаю mod_rewrite
rules - это некоторые из последних обрабатываемых директив, непосредственно перед тем, как файл будет фактически взят из файловой системы.