Apache2 Rewrite/Redirect 从 http 到 https

Apache2 Rewrite/Redirect from http to https

我在 Ubuntu 上使用 apache2 并使用 letsencrypt 来保护我的网站。 我也想从 http://mywebsite.com to https://mywebsite.com 重定向,但这不适用于以下配置:

文件名-xy.conf 如下所示:

<VirtualHost *:80>
    ServerName mywebsite.com

    ProxyRequests off
    ProxyPreserveHost On
    <Location / >
        ProxyPass "ajp://localhost:9090/"
        ProxyPassReverse "ajp://localhost:9090/"
    </Location>
</VirtualHost>

文件名-xy-ssl.conf 看起来像这样:

<VirtualHost *:80>
    ServerName mywebsite.com

    RewriteEngine on
    #RewriteCond %{SERVER_NAME} =www.mywebsite.com [OR]
    RewriteCond %{HTTPS} =mywebsite.com
    RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

 # forward ORDS requests to tomcat
 <VirtualHost *:443>
    ServerName mywebsite.com

    # SSL certificates settings
    #Include /etc/apache2/conf-enabled/options-ssl-apache.conf
    SSLCertificateFile /etc/apache2/ssl/mywebsite.com/fullchain.cer
    SSLCertificateKeyFile /etc/apache2/ssl/mywebsite.com/mywebsite.com.key
    SSLCertificateChainFile /etc/apache2/ssl/mywebsite.com/ca.cer

    ProxyRequests on
    ProxyPreserveHost On
    <Location / >
        ProxyPass "ajp://localhost:9090/"
        ProxyPassReverse "ajp://localhost:9090/"
    </Location>
</VirtualHost>

使用此配置,我将导航到默认的 apache2 主页,https://mywebpage.com 工作正常。 为了自动从 http://mywebsite.com to https://mywebsite.com 重定向,这个配置有什么问题?

为了处理这种情况,我有如下的 http vhost。我认为它也不需要启用任何新模块,只需像最后一行一样添加重定向语句:)

因为您使用的是 Ubuntu 和 Apache。 LetsEncrypt 自动安装并为 SSL 的 apache 进行配置。如果您想进行手动配置,请按照以下步骤操作。

File name-xy.conf should look like this:

<VirtualHost *:80>
    ServerName mywebsite.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ProxyRequests off
    ProxyPreserveHost On
    <Location / >
        ProxyPass "ajp://localhost:9090/"
        ProxyPassReverse "ajp://localhost:9090/"
    </Location>
    #Add the below Lines
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =mywebsite.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>

File name-xy-ssl.conf should look like this:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName mywebsite.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # SSL certificates settings
    #Include /etc/apache2/conf-enabled/options-ssl-apache.conf
    SSLCertificateFile /etc/apache2/ssl/mywebsite.com/fullchain.cer
    SSLCertificateKeyFile /etc/apache2/ssl/mywebsite.com/mywebsite.com.key
    SSLCertificateChainFile /etc/apache2/ssl/mywebsite.com/ca.cer

    ProxyRequests on
    ProxyPreserveHost On
    <Location / >
        ProxyPass "ajp://localhost:9090/"
        ProxyPassReverse "ajp://localhost:9090/"
    </Location>
</VirtualHost>
</IfModule>

重新启动您的 Apache 服务器 sudo service apache2 restart 并清除您的浏览器缓存和历史记录以生效。