apache将HTTPS重定向到规范的HTTPS

时间:2018-02-23 00:11:58

标签: apache lets-encrypt

我希望对我的网站的所有访问权限都被强制为HTTPS(https://support.google.com/webmasters/answer/6073543?hl=en)。

我还想强制规范的www网址访问(https://www.yes-www.org/why-use-www/

我尝试使用重定向指令https://wiki.apache.org/httpd/RedirectSSLhttps://httpd.apache.org/docs/2.4/rewrite/remapping.html#canonicalhost

根据Apache建议这样做

我有一个有效的let-encrypt证书,它同时包含www和裸域。

我已配置*:80和*:443 VirtualHost重定向。 /etc/httpd/conf.d/www.example.com.conf:

<VirtualHost *:80>
  ServerName  www.example.com
  ServerAlias     example.com
  Redirect permanent / https://www.example.com
</VirtualHost>

<VirtualHost *:443>
  ServerName  example.com
  SSLEngine on
  SSLCertificateFile    /etc/letsencrypt/live/www.example.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
  SSLCACertificateFile  /etc/letsencrypt/live/www.example.com/fullchain.pem
  Redirect permanent / https://www.example.com
</VirtualHost>

<VirtualHost *:443>
  ServerName www.example.com
  SSLEngine on
  SSLCertificateFile    /etc/letsencrypt/live/www.example.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
  SSLCACertificateFile  /etc/letsencrypt/live/www.example.com/fullchain.pem
  DocumentRoot "/var/www/html/www.example.com"
</VirtualHost>

<Directory "/var/www/html/www.example.com">
  Order allow,deny
  Allow from all
</Directory>

如果我指定基本URL(example.com,www.example.com,https://example.com等),一切正常。但是,如果我在裸HTTPS请求中指定页面,重定向会吃根斜杠(https://example.com/index.html变为https://www.example.comindex.html)。

2 个答案:

答案 0 :(得分:0)

对于所有非ssl到ssl -

,我执行以下操作
<VirtualHost *:80>
  ServerName example.org
  ServerAlias www.example.org
  RewriteEngine on
  RewriteRule ^/(.*)$ https://www.example.org/$1 [R,L]
</VirtualHost>

仅{}重定向到https://example.org

www.example.org应该做同样的事情。
<VirtualHost your.ip.add.ress:443>
  ServerName example.org
  RewriteEngine on
  RewriteRule ^/(.*)$ https://www.example.org/$1 [R,L]

  *snip*  
  Normal SSL certificate/key stuff goes here
  *snip*

</VirtualHost>

答案 1 :(得分:0)

RedirectMatch似乎解决了类似于ivanivan建议的Rewrite的问题。将*:443 VHost部分中的重定向行更改为以下似乎可以解决问题:

RedirectMatch permanent ^/?(.*) https://www.example.com/$1

我仍然不明白为什么简单的重定向不适用于HTTPS。

另外,https://salferrarello.com/chrome-clear-redirect-cache/在测试期间禁用Chrome中的重定向缓存非常有用。