如何将 www 子域名重定向到 https 协议?

如何将 www 子域名重定向到 https 协议?

我有一个网站,可以通过在 Web 浏览器中输入多个不同的 URL 来访问。以下所有情况也适用(将通过https协议加载):

lamtakam.com
https://lamtakam.com
https://www.lamtakam.com
http://lamtakam.com       -- automatically will be redirected to https which is correct

好了,现在一切都很好了。唯一的问题是这个 URL:

http://www.lamtakam.com

http它将通过(而非)协议加载https。我如何才能让它https也重定向到协议?


我的服务器使用 Linux ubuntu 作为操作系统,使用 apache 作为 Web 服务器。


编辑:以下是文件内容/etc/apache2/sites-available/000-default.conf

    #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/myweb

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
RewriteEngine on
RewriteCond %{SERVER_NAME} =lamtakam.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

    <Directory /var/www/html/myweb>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

答案1

问题在于何时进行重写。它设置为仅精确匹配裸域(= lamtakam.com),而不匹配www.重写条件中的子域。

尝试使用它来重写条件和规则:

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^(www\.)?lamtakam\.com$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [END,NE,R=permanent]

...然后重新启动 Apache,看看站点重定向是否现在发生。不过,请先小心地刻录浏览器缓存,这样您就不会遇到之前缓存的页面数据的问题。

这与您的配置设置不同:

  1. 要求 HTTPS 未开启(即请求已开启,http://但未开启https://),并且
  2. 要求请求的主机名/域与指定的正则表达式匹配(与 和 都匹配www.lamtakam.comlamtakam.com,并且
  3. HTTP_HOST是否使用 的值而不是的值进行重写SERVER_NAME,以保持域相同。%{SERVER_NAME}如果您愿意(或者您的站点需要这样做),您可以将其更改为重写规则,但我更喜欢在 中使用最初请求的主机名HTTP_HOST

请注意,我建议使用,%{HTTP_HOST}以便您匹配实际请求的主机名,而不是 Apache 存储的“服务器名称”。

(此答案改编自RewriteCond %{SERVER_NAME} 语法经过斯塔基恩在 StackOverflow 上)

相关内容