Ssl

如何在 Apache 位置強制使用 SSL (https)

  • September 1, 2014

我正在嘗試在 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},但我們尚未嘗試過。

引用自:https://serverfault.com/questions/77831