Apache redireciona para https para autenticação básica

3

Eu tenho uma variação complicada em um problema antigo.

Eu tenho um site baseado em apache que geralmente deve ser acessado via http / porta 80. No entanto, para certas áreas protegidas áreas que exigem autenticação (designada por. htaccess), eu quero ser capaz de redirecionar o usuário a https / port 443 .

A chave aqui é que eu quero que isso sempre aconteça para a autenticação básica - ou seja, não quero ter que recriar cada arquivo de htaccess com uma diretiva de redirecionamento. Eu só quero impor isso para autenticação básica (outro tráfego deve ser descriptografado). As áreas protegidas estão espalhadas por todo o site. É possível redirecionar de alguma forma todas as solicitações básicas de autenticação para o host SSL?

    
por shreddd 13.03.2010 / 06:02

3 respostas

1

Eu finalmente descobri como isso estava sendo feito em um de nossos servidores (alerta do Hack feio).

Basicamente, não permitimos arquivos .htaccess na sub-rotina do host não-SSL (porta 80). Isso gera um erro 500 quando atinge um arquivo .htaccess.

Nós redirecionamos todos os 500 erros para o host SSL, onde os arquivos .htaccess são permitidos. As mensagens de erro "Real" 500 presumivelmente falharão no lado do SSL também, enquanto os redirecionamentos relacionados ao .htaccess estão agora funcionais no lado SSL ativado.

Sim - muito feio. Eu não quero replicar isso, mas achei que iria passar adiante.

    
por 26.05.2010 / 01:43
1

Eu não acho que seja possível redirecionar automaticamente as solicitações HTTP com Basic Authentication para um determinado local - pelo menos não com o Apache httpd sozinho.

Mas você pode usar a diretiva SSLRequireSSL dentro de um Localização bloqueia para forçar os clientes a usar HTTPS, caso contrário eles receberão um erro 403.

    
por 13.03.2010 / 07:19
0

Em um arquivo .htaccess dentro do diretório que é o acesso com Basic Auth, coloque isso:

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

Isso redirecionará seus visitantes usando http para as páginas de erros 401 ou 403.

Nessa página, coloque isso:

<?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>';
} ?>

A autenticação básica será redirecionada para HTTPS.

    
por 16.08.2013 / 13:49