Apache + plesk vhost 问题:.htaccess 被忽略!

Apache + plesk vhost 问题:.htaccess 被忽略!

我对简单的 Apache 配置有疑问。

当用户要求https://mydomain.com我必须将其重定向到https://www.mydomain.com,因为我的 https 证书仅对带有 www 的域名有效。

我在 /var/www/vhosts/mydomain.com/conf/ 目录中创建了 vhost.conf,内容如下:

<Directory /var/www/vhosts/mydomain.com/httpsdocs>
    AllowOverride All
</Directory>

我的 .htaccess 文件放入 /var/www/vhosts/mydomain.com/httpsdocs/ 中:

RewriteEngine on
RewriteCond %{HTTPS_HOST} ^mydomain\.com
RewriteRule ^(.*)$ https://www.mydomain.com/$1 [R=301,L]

但似乎.htaccess 被完全忽略了。

任何想法?

答案1

https 连接的顺序大致如下

  1. 用户类型https://mydomain.com进入地址栏 - 浏览器将其解析为 IP 地址 1.1.1.1
  2. 浏览器在端口 443 上打开与 1.1.1.1 的连接。
  3. 服务器发送 www.mydomain.com 证书 - 浏览器检查主机名“mydomain.com”
  4. 浏览器显示错误信息,用户点击“确定/继续/等等”。
  5. 浏览器通过 SSL 连接发送 HTTP 请求,包括 Host: 标头“mydomain.com”
  6. mod_rewrite 使用 htaccess 文件中的规则来发送重定向。

因此,在连接距离足够远以致 mod_rewrite 能够执行操作之前,错误消息就已经出现了。要阻止错误发生,您必须获得具有主题备用名称的证书(即适用于 www 和非 www),或使用 SNI(在 SSL 协商中添加一个额外步骤,浏览器可以告诉 Apache 它想要哪个主机名,然后 Apache 可以选择适当的证书)。

此外,即使连接是 HTTPS,变量也始终被称为 %{HTTP_HOST}(因为这只是“SSL 隧道内的 HTTP”的简写)。

相关内容