Назад | Перейти на главную страницу

Перенаправление Apache на https для базовой аутентификации

У меня есть хитрый вариант старой проблемы.

У меня есть сайт на основе apache, доступ к которому обычно должен осуществляться через http / порт 80. Однако для некоторых защищенных областей, требующих аутентификации (обозначенных как .htaccess), я хочу иметь возможность перенаправить пользователя на https / порт 443.

Ключевым моментом здесь является то, что я хочу, чтобы это всегда происходило для базовой аутентификации, т.е. я не хочу воссоздавать каждый файл htaccess с директивой перенаправления. Я хочу применить это только для базовой аутентификации (остальной трафик должен быть незашифрованным). Охраняемые территории разбросаны по всей территории. Можно ли как-то перенаправить все запросы базовой аутентификации на хост SSL?

Наконец-то я понял, как это делается на одном из наших серверов (предупреждение Ugly Hack).

Мы в основном запрещаем файлы .htaccess в разделе для хоста без SSL (порт 80). Это генерирует ошибку 500 при попадании в файл .htaccess.

Мы перенаправляем все 500 ошибок на хост SSL, где разрешены файлы .htaccess. «Настоящие» 500 сообщений об ошибках, вероятно, не будут работать и на стороне SSL, в то время как перенаправления, связанные с .htaccess, теперь работают на стороне SSL.

Ага - довольно некрасиво. Я не хочу повторять это, но решил, что передам это.

Я не думаю, что можно автоматически перенаправлять HTTP-запросы с базовой аутентификацией в определенное место - по крайней мере, не только с Apache httpd.

Но вы можете использовать SSLRequireSSL директива внутри Расположение block, чтобы заставить клиентов использовать HTTPS, иначе они получат ошибку 403.

В файле .htaccess в каталоге, доступ к которому осуществляется с помощью Basic Auth, поместите следующее:

SSLRequireSSL
ErrorDocument 403 /erreurs/403.php
ErrorDocument 401 /erreurs/401.php

Это перенаправит ваших посетителей, использующих http, на страницы с ошибками 401 или 403.

На этой странице поместите это:

<?php
$path = $SERVER['REQUEST_URI'];
if($_SERVER["HTTPS"] != "on")
{
header('HTTP/1.1 301 Moved Permanently');
header('Status: 301 Moved Permanently');
header('Cache-Control: max-age=31536000');
header('Content-Language: en');
header('Location: https://www.example.com/'.$path.'');
echo '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><title>301 Moved Permanently</title></head><body><h1>Moved Permanently</h1><p>The document has moved <a href="'.$path.'">here</a></p></body></html>';
}
else {
echo '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><title>Forbidden</title></head><body><h1>Forbidden</h1><p>Forbidden</p></body></html>';
} ?>

Базовая аутентификация будет перенаправлена ​​на HTTPS.