我正在尝试在 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]
但是,我不明白它到底有什么用,所以我不敢使用它。另外,它看起来更像是一个丑陋的黑客,而不是正确的解决方案。
答案1
这不是黑客行为。下面为您快速分析一下:
# 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]
答案2
我们使用的语法略有不同,但基本相同。我们检查是否未使用 HTTPS,而不是检查接收请求的端口。我们使用%{HTTP_HOST}
环境变量,而不是硬编码主机名。
RewriteEngine On
RewriteCond %{HTTPS} Off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
我更喜欢这种方法,因为它在 Apache 监听非标准端口时有效。%{HTTP_HOST}
如果您的网站位于代理后面,则使用可能会出现问题,但我们尚未尝试过。
答案3
尝试
<Location />
SSLRequireSSL
</Location>
答案4
除了已经提到的重定向之外,您可能还想添加SSLRequireSSL 指令你的地点如果您不使用 HTTPS 连接,容器将拒绝访问。但是,使用仅侦听 *:443 的 SVN 站点的 VirtualHost 解决方案更为优雅。