为服务器上的单个站点默认配置HTTPS

为服务器上的单个站点默认配置HTTPS

我有一台 WAMP 服务器,上面有几个网站。我想只为其中一个网站默认启用 SSL。

虽然https://www.example.com可以访问,没有发生自动重定向http://www.example.com

httpd -t显示Syntax Ok

这是我的httpd-vhosts.conf文件

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com 
    RewriteEngine On
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "C:/wamp/www/example"
    ServerName http://manage.example.com/
    ServerAlias http://manage.example.com/   
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin [email protected]
    DocumentRoot "c:/wamp/www/example/public"
    ServerName example.com
    ServerAlias www.example.com

    SSLEngine on

    SSLCertificateFile "C:/wamp/OpenSSL/cert/sslcert.cert"
    SSLCertificateKeyFile "C:/wamp/OpenSSL/certs/mydomain.key" 
</VirtualHost>

答案1

你的错误在这里:您正在使用 %{HTTP_HOST} 而不是 %{SERVER_NAME}

以下是将 http 流量重定向到 https 的 3 种方法:

1 - 使用重定向(https://httpd.apache.org/docs/2.4/en/mod/mod_alias.html

这是 apache 推荐的:https://httpd.apache.org/docs/2.4/rewrite/avoid.html

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com 
    # [ Http to Https ]
    Redirect 301 / https://www.example.com/
</VirtualHost>

2——使用重写条件(https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com 
    # [ Http to Https ]
    RewriteEngine on
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

3-使用虚拟主机外部重写

    RewriteCond %{HTTPS} !on
    RewriteCond %{SERVER_NAME} !manage.example.com
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

或者

    RewriteCond %{SERVER_PORT} ^80$
    RewriteCond %{SERVER_NAME} !manage.example.com
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

奖金-更多信息:

如果你想使用你的正则表达式变量

    RewriteRule (.*) https://%{SERVER_NAME}$1

(.*) = 捕获正则表达式中的所有内容

$1 = 结果变量,它将以 / 开头(因此前面不需要额外的 /)

R = 重定向状态代码,这里有列表:

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

L = 标志,表示最后,这里有标志列表代码:

https://httpd.apache.org/docs/2.4/rewrite/flags.html

一旦配置改变,apache 需要重新启动

答案2

您的重写规则不正确。您忘记使用 rewriteCond 来检查您使用的是 HTTP 还是 HTTPS。

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

答案3

您的描述似乎RewriteRule不正确,请尝试以下操作:

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

欲了解更多信息,请访问Apache 维基

相关内容