Ssl
如何在 Apache 位置強制使用 SSL (https)
我正在嘗試在 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}
,但我們尚未嘗試過。