Mod_dav_svnが提供するSVNリポジトリでSSL(https)を強制しようとしています。ここに私が持っているものがあります:
<Location /svn/projectname>
DAV svn
SVNPath /var/repo/projectname
Require valid-user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-auth-projectname
#here's what I tried (didn't work)
SSLCipherSuite HIGH:MEDIUM
</Location>
ただし、http経由でログインしても、httpsにリダイレクトされません。 httpのままです。上記が機能しないのはなぜですか?このhttpsリダイレクトを機能させるにはどうすればよいですか?
私はmod_rewriteの使用に関する提案を見てきました、例えば:
# /dir/.htaccess
RewriteEngine on
RewriteCond %{SERVER_PORT}!443
RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]
ただ、何をやっているのかよくわからないので使ってみませんか。さらに、それは正しいソリューションよりも醜いハックのように見えます。
それはハックではありません。ここにあなたのための簡単な内訳があります:
# Turn on Rewriting
RewriteEngine on
# Apply this rule If request does not arrive on port 443
RewriteCond %{SERVER_PORT} !443
# RegEx to capture request, URL to send it to (tacking on the captured text, stored in $1), Redirect it, and Oh, I'm the last rule.
RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]
少し異なりますが、ほとんど同等の構文を使用します。リクエストが受信されたポートをチェックするのではなく、HTTPSが使用されていないことをチェックします。また、ホスト名をハードコーディングするのではなく、%{HTTP_Host}
環境変数を使用しています。
RewriteEngine On
RewriteCond %{HTTPS} Off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [R,L]
Apacheが標準以外のポートでリッスンしているときに機能するため、このアプローチは少し良くなっています。サイトがプロキシの背後にある場合、%{HTTP_Host}
の使用に問題がある可能性がありますが、まだ試していない。
試す
<Location />
SSLRequireSSL
</Location>
仮想ホストという名前ですべてを定義します。次に、<Virtualhost *:80>
定義。ポート443でないかどうかを確認する必要はありません。次のようなルールを使用して、80に到達するすべてのものを443に強制することができます。
RewriteEngine On
RewriteRule ^(.)$ https://www.yourdomain.com/$1 [R,L]
上記のリダイレクトに加えて、HTTPS接続を使用しない場合にアクセスを拒否する SSLRequireSSLディレクティブ を Location コンテナに追加することができます。ただし、*:443でのみリッスンするSVNサイトのVirtualHostを使用するソリューションは、よりエレガントです。
Apache 2を想定:
実際に見て実際にSSLを有効にすることを除いて、すべてを実行しました。ここで説明されているように、「SSLEngine」、「SSLCertificateFile」、および「SSLCertificateKeyFile」コマンドを使用します。
SSLCertificate * Fileコマンド用のPKIファイル(SSL証明書および関連する秘密鍵ファイル)を生成または購入する必要があります。
http://www.debianhelp.co.uk/apacheinstall.htm
# /dir/.htaccess
1. RewriteEngine on
2. RewriteCond %{SERVER_PORT}!443
3. RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]
これは言う:
サイトでSSLがサポートされていて、svnサブディレクトリでSSLを強制しようとしているだけの場合は、次のようにします。
1. RewriteEngine on
2. RewriteCond %{SERVER_PORT}!443
3. RewriteRule ^/svn/(.*)$ https://www.x.com/svn/$1 [R,L]
これは上記と同じことを行いますが、Subversionディレクトリの下にあるものに対してのみです。
あなたがしたいことは、通常のWeb接続のためにredirectをhttps
に強制することです。書き換えルールはそれを達成しているようです。これは醜いハックではなく、正しい方法です。現在の構成ではredirectは強制されません。
LocationブロックでSSLRequireSSLを使用する