gpt4 book ai didi

apache - 重定向 https ://www to https://non-www - without seeing certificate error, 可能吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:16 26 4
gpt4 key购买 nike

所以我的 SSL 证书只适用于 https://example.com - 而不是 https://www.example.com(不能提示,它是免费)。

在尝试 mod_rewrite 和大量阅读(主要来自 stackoverflow)之后,我有一个 .htaccess 文件可以完成我需要的大部分工作,这是该文件(当然,域已编辑)。

<IfModule mod_rewrite.c>
RewriteEngine On

#First rewrite any request to the wrong domain to use the correct one
RewriteCond %{HTTP_HOST} !^subdomain\.
RewriteCond %{HTTP_HOST} ^(www|ftp|mail)\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

#Redirect these subdomains to a subfolder
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule (.+)$ "http://example.com/%1" [L,P]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

该脚本包含有关其功能的注释(我比您想象的更需要它们)。正在重定向的子域的文件夹中有一个额外的 .htaccess 文件(根 Web 文件夹中的子文件夹,具有匹配的子域名)和我的 dns 服务器上随附的 dns 条目。该文件夹上的 .htaccess 只是将 http(端口 80)重定向到 https。

At the moment, it does what I need but I'm looking for simpler ways to write this. And by simpler it could also mean more global (if it makes it faster than hardcoding domains) and if there are any speed improvements to gain from said rewrite.

如前所述,我的证书仅适用于非 www example.com 域,因此这让我想到了第二个(也是我的主要)问题。

像这样路由的流量:https://www.example.com 将在任何路由、重写等完成之前看到错误。这是因为此时甚至还没有与 Web 服务器建立连接,对吗?这本质上是您的服务器移交您的证书并且浏览器说:等一下!

Is there a way to prevent traffic to hit your server the improper way (https://www) before the browser gives out a certificate error?

这不必仅限于 .htaccess 方法。

Is there a way to do this - at all? And what is that way?

编辑:

我的条件有一些问题,重写了不应该命中的查询。我也有一些重定向循环,所以前往 apache.org 进行研究;因此,作为跟踪上述更改的一种方式,现在是 .htaccess 文件:

<IfModule mod_rewrite.c>
RewriteEngine On

# First rewrite any request to the wrong domain to use the correct one
RewriteCond %{HTTP_HOST} ^(www|ftp|mail)\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1

# Redirect these subdomains to a subfolder
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteCond %{REQUEST_URI} !^([^/.]+)/([^/.]+)
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule ^(.*)$ http://example.com/%1$1 [L,NC,QSA]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} ^http://example\.com/$ [NC]
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [L,R,NE]
</IfModule>

最佳答案

Is there a way to prevent traffic to hit your server the improper way (https:// www) before the browser gives out a certificate error?

不,您无能为力,您的评估是正确的,浏览器查看服务器证书并发现主机不匹配并显示错误。该错误不是由服务器生成的,甚至在请求发送到服务器之前就会发生。这发生在 SSL 握手期间。您唯一可以做的就是阻止任何 http://www 链接存在,或者购买包含“www”的新证书。

至于您的规则,真的没有办法简化它,因为每个规则都有多个条件。

关于apache - 重定向 https ://www to https://non-www - without seeing certificate error, 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com