SSLを使用してのみアクセスする必要があるいくつかのサービスをホストするSSL証明書を備えたApache 2.2サーバーがあります。
つまり:https://myserver.com/topsecret/はhttp://myserver.com/topsecret/は拒否するか、理想的にはhttpsにリダイレクトする必要があります。 http://myserver.com/public にはこの制限がなく、httpまたはhttpsのいずれかを使用して動作するはずです。
httpを許可/拒否する決定は最上位ディレクトリで行われ、その下のすべてのコンテンツに影響します。
この方法でアクセスを制限するためにApache構成に配置できるディレクティブはありますか?
SSLRequireSSL ディレクティブが探しているものです。
<VirtualHost>
、または仮想ホストを使用していない場合はトップレベル:
<Directory /topsecret>
SSLRequireSSL
</Directory>
または.htaccess
:
SSLRequireSSL
グローバル構成では、次のものを使用できます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule .* https://%{HTTP_Host}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>
同様に、セキュリティで保護されたディレクトリツリーの最初のディレクトリにある.htaccessファイルを使用できます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule .* https://%{HTTP_Host}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>
最後の1つは、グローバルまたは仮想ホスト構成のディレクトリディレクティブ内に配置することもできます。
誰かがSSLRequireSSLについて言及しましたが、それだけでは機能しないと思います。成功した例は見つかりませんでした。推奨される方法は https://wiki.Apache.org/httpd/RedirectSSL 私はそれを適用しましたが、うまく機能します!
あるいは、Apacheの構成オプションを使用するのではなく、サーバー側の言語を使用して処理を行うこともできます(サーバーの構成にアクセスできない場合)。
たとえば、PHPの場合:
if (!isset($_SERVER['HTTPS'])) {
// put your redirect here
header('Location: http://myserver.com/public');
}
(ただし、注意してください-Microsoft IISでISAPIを使用している場合、要求がnot HTTPS経由でルーティングされると、$ _ SERVER ['HTTPS']変数の値は "off"になります")
VirtualHostディレクティブを使用していると仮定すると、
アクセスを拒否する非SSL仮想ホストにDirectoryディレクティブを配置します。
次に、アクセスを許可するssl virtualhostにDirectoryディレクティブを配置します。
このmod_rewriteは常に.htaccessファイルで行いましたが、メインの構成ファイル内でも行うことができるはずです。
これを実現するためのいくつかの方法を示したガイドを次に示します。 Smart HTTP and HTTPS RewriteRule Redirects