web-dev-qa-db-ja.com

基本認証のためのhttpsへのApacheリダイレクト

私は古い問題にトリッキーなバリエーションがあります。

一般的にhttp/port 80経由でアクセスする必要があるApacheベースのサイトがあります。ただし、認証が必要な特定の領域で保護された領域(.htaccessで指定)については、ユーザーをhttps/port443にリダイレクトできるようにします。

ここで重要なのは、これを基本認証で常に発生させたいということです。つまり、リダイレクトディレクティブを使用して各htaccessファイルを再作成する必要はありません。これを基本認証にのみ適用したい(他のトラフィックは暗号化されていない必要があります)。保護地域は敷地内に点在しています。どういうわけか、すべての基本認証要求をSSLホストにリダイレクトすることは可能ですか?

3
shreddd

私はついにこれが私たちのサーバーの1つでどのように行われているかを理解しました(醜いハックアラート)。

基本的に、非SSL(ポート80)ホストのスタンザ内の.htaccessファイルは許可されません。これにより、.htaccessファイルにヒットすると500エラーが生成されます。

500個のエラーすべてを.htaccessファイルが許可されているSSLホストにリダイレクトします。 「実際の」500エラーメッセージはおそらくSSL側でも失敗しますが、.htaccess関連のリダイレクトはSSL対応側でも機能するようになりました。

うん-かなり醜い。私はこれを複製したくありませんが、私はこれを渡すと思いました。

1
shreddd

基本認証を使用してHTTPリクエストを特定の場所に自動的にリダイレクトすることはできないと思います-少なくともApachehttpdだけでは。

ただし、 Location ブロック内で SSLRequireSSL ディレクティブを使用して、クライアントにHTTPSの使用を強制することができます。そうしないと、エラー403が発生します。

1
joschi

基本認証でアクセスできるディレクトリ内の.htaccessファイルに、次のように入力します。

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にリダイレクトされます。

0
user185862