将所有请求重定向到HTTPS和www到非www

时间:2015-07-12 15:41:19

标签: apache mod-rewrite redirect

我正在修复服务器上的Apache(2.4.12)配置文件,该服务器提供三个不同的域名。我为每个站点都有一个不同的配置文件。我不能为我的生活弄清楚如何完成以下两个方面:

  1. 将所有http次请求重定向到https,保持请求的其余部分(子域/主机和文档路径)完全相同
  2. 将所有www次请求重定向到非www
  3. 我已经读过,如果我只有一个*:80 VirtualHost并且在那里放置重写规则,那么这可以一步完成(我的子域的其余部分都是*:443 VirtualHosts,但www),但我无法弄明白该怎么做。 SO上的这些答案不起作用:

    编辑:这是我在下面mike.k's answer的评论中引用的代码。

    <VirtualHost *:80>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} www.example.com
        RewriteRule ^(.*)$ https://example.com/$1 [R=permanent,L]
    
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://example.com%{REQUEST_URI}
    </VirtualHost>
    

1 个答案:

答案 0 :(得分:1)

这来自我的生产系统并且有效。

THE_HOSTNAME例如server,然后THE_FQHNserver.domain.edu,如果您不想支持通配符和多个域名,这有助于SSL证书。

# redirect to FQHN
RewriteEngine on
RewriteCond %{HTTP_HOST} THE_HOSTNAME$
RewriteRule ^(.*)$ https://THE_FQHN/ $1 [R=permanent,L]

# redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://THE_FQHN%{REQUEST_URI}

在你的情况下,www.domain.com将是THE_HOSTNAME的位置,而THE_FQHN将是domain.com,只需翻转