Ssl

使用 SSL VirtualHost 設置強制 www 前綴

  • September 10, 2016

執行 Apache/2.4.7。

我似乎在www為我的一個 SSL 域強制使用前綴時遇到了一些麻煩。

以下模式應重定向到:https://www.foo.com

  • foo.com
  • www.foo.com
  • http://foo.com
  • http://www.foo.com
  • https://foo.com

值得一提的是,我還想保留任何可能已請求的 URI,例如。foo.com/bar=>https://www.foo.com/bar

foo.com.conf所以這是我文件中相關的目前程式碼。

<VirtualHost *:80>
   ServerName foo.com
   ServerAlias *.foo.com
   RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>

<VirtualHost *:443>
   ServerName foo.com
   ServerAlias *.foo.com
</VirtualHost>

我會很感激這裡的一些指導。

Jonah 的程式碼片段執行良好,但我最終使用了mod_macro來避免重複程式碼。

<Macro ServerAliasesRedirect>
   ServerAlias foo.com
   ServerAlias *.foo.com
   RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</Macro>

<Macro SSL>
   SSLEngine on
   SSLCertificateFile /etc/apache2/ssl/foo.com.crt
   SSLCertificateKeyFile /etc/apache2/ssl/foo.com.key
   SSLCertificateChainFile /etc/apache2/ssl/foo.com.ca-bundle
</Macro>

<VirtualHost *:80>
   Use ServerAliasesRedirect
</VirtualHost>

<VirtualHost *:443>
   Use SSL
   ServerName www.foo.com    
   # ...directory stuff and so on...
</VirtualHost>

<VirtualHost *:443>
   Use SSL
   Use ServerAliasesRedirect
</VirtualHost>

擺脫ServerName埠 80 和埠 443 虛擬主機中的指令。

將與埠 80 虛擬主機中類似的重定向匹配指令添加到埠 443 虛擬主機。

使用另一個埠 443 虛擬主機

ServerName www.foo.com

確保此虛擬主機出現並在其他埠 443 虛擬主機之前進行處理。

這個虛擬主機是使用者被重定向後登陸的地方。所以把其他合適的配置放在這裡。

例子:

<VirtualHost *:80>
   ServerAlias foo.com
   ServerAlias *.foo.com
   RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>

<VirtualHost *:443>
   ServerName www.foo.com
   # various directives as appropriate for live service to users
   # important to place this before the wildcard VirtualHost below
   # which will match all subdomains 
   # not matched by a preceding VirtualHost
</VirtualHost>

<VirtualHost *:443>
   ServerAlias foo.com
   ServerAlias *.foo.com
   RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>

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