.htaccess将非SSL域重定向到另一个SSL域

时间:2018-10-18 10:07:40

标签: apache .htaccess https ssl-certificate url-redirection

我具有以下.htaccess:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.old_domain.de$
RewriteRule (.*) https://new_domain.de/$1 [R=301,L]

问题是,该规则似乎只能正确重定向www.old_domain.de或http://www.old_domain.de,而不能重定向https://old_domain.de或old_domain.de(跳转至https:// automatically)。在第二种情况下,我收到以下错误:

SSL_ERROR_UNRECOGNIZED_NAME_ALERT

我已经尝试将https://和非www域重写为http://www。但无法以某种方式获得想要的结果。可能我想念一些重要的东西。

在我的新域的.htaccess中,https://强制可能有问题吗?

1 个答案:

答案 0 :(得分:1)

要重定向http://www.old_domain.de或www.old_domain.de或http://old_domain.de或old_domain.de,请使用以下代码

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?old_domain\.de$ [NC]
RewriteRule (.*) https://new_domain.de/$1 [R=301,L]

您的代码缺少RewriteCond中的(www\.)?,无论重写是否包含www,它都将使重写工作正常。

您可以在link上使用htaccess测试器对它进行测试

类似地,您应该为 SSL(HTTPS)配置一个单独的虚拟主机。在该虚拟主机中,您还需要复制上面的代码。

在端口443上将SSL配置为侦听,因此请在htaccess中搜索类似于以下代码的内容

<VirtualHost *:443>

    ServerName www.old_domain.de
    ServerAlias old_domain.de

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/example/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/example/apache.key 

 </VirtualHost>

如果仍然找不到在443上配置了虚拟主机侦听功能的文件,则可以使用 -S标志运行apache,如下命令

httpd -S or apachectl -S

这将为您提供文件的名称,在该文件中,虚拟主机在443上的侦听配置如下所示:

*:80     default server xxx.xxx.xxx.xxx (/etc/httpd/conf.d/eco.conf:1)
         port 80 namevhost xxx.xxx.xxx.xxx (/etc/httpd/conf.d/eco.conf:1)

*:443    default server xxx.xxx.xxx.xxx (/etc/httpd/conf.d/ssl.conf:1)
         port 443 namevhost xxx.xxx.xxx.xxx (/etc/httpd/conf.d/ssl.conf:1)

例如/etc/httpd/conf.d/ssl.conf是在其中配置了侦听443的虚拟主机的文件。