VPS Ubuntu 上的重定向错误网站“www 版本”重定向到“apache 默认页面”

VPS Ubuntu 上的重定向错误网站“www 版本”重定向到“apache 默认页面”

你好,我是一名网页设计师,最近开始维护一台 VPS 服务器,
我正在使用一台运行 ubuntu 18 的 Lamp VPS 服务器,上面有多个 PHP 网站,
已经多次编辑了虚拟主机和 htaccess。

问题 :

1.在所有网站中:所有“www 版本的网站”重定向到 apache 主页
2.非 https 版本不会重定向到 https 版本

我是否应该单独为 www 版本重新颁发 SSL 证书?

虚拟主机代码

<VirtualHost *:80>
    ServerName www.temp.com
    ServerAlias temp.com
    Redirect "/" "https://www.temp.com"
    DocumentRoot /var/www/temp.com/

    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,END]

    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,END]
   </VirtualHost>

.htaccess 代码

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteRule . /index.html [L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

我使用 Certbot 来获取 SSL 证书


sudo certbot --apache

答案1

<VirtualHost *:80>

端口 80 上的 VirtualHost 应始终是纯文本 http 主机。您永远不能在同一个端口上同时使用纯文本 http 和 https。
这意味着下面的配置行永远不能应用,并且应该省略:

    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,END]

Redirect指令:

   Redirect "/" "https://www.temp.com"

是简单和推荐版本 下面的 mod-rewrite 代码在功能上是等效的:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,END]

它们都从纯 http 重定向到 https。你不需要两者。我建议删除 mod_rewrite 代码。

您当然不需要在文件中第三次重复重定向到 https 功能.htaccess


HTTPS VirtualHost 应该有一个如下所示的代码块:

<VirtualHost *:443>
    ServerName www.temp.com
    ServerAlias temp.com
    DocumentRoot /var/www/temp.com/

    SSLEngine on
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

    SSLCertificateFile /etc/letsencrypt/live/.../cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/..../privkey.pem
    SSLCACertificateFile /etc/letsencrypt/live/.../chain.pem

</VirtualHost>

相关内容