我的证书不允许使用通配符,仅适用于https://example.com
。
我想重定向所有流量:http(s)://*.example.com
- > https://example.com
。
从http://*.example.com/*
到https://example.com/*
我从以下地址收到错误 NET :: ERR_CERT_COMMON_NAME_INVALID :
https://*.example.com/*
至https://example.com
。
这是虚拟主机的default.conf
配置文件:
<VirtualHost *:80>
NameVirtualHost *:80
ServerName example.com
ServerAlias *.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
NameVirtualHost *:443
ServerName example.com
ServerAlias *.example.com
Redirect permanent "(?i)https:\/\/\d*[a-z0-9]*.example.com" "https://example.com"
我已经尝试了上面最后一个重定向行的几种变体,正如几个相关问题所示。我现在只能发布两个,因为我是新来的:
我猜这是行不通的,因为服务器在处理重定向代码之前会返回证书错误。我上面提到的一个问题暗示了这一点,但它并没有被接受作为答案而且没有人真正证实或否认它。
是否可以在没有通配符证书的情况下执行此操作?如果是这样,我上面的Redirect代码出了什么问题?据我所知,正则表达式正在处理从https://*.example.com
到https://example.com
的不区分大小写的重定向。
答案 0 :(得分:3)
是否可以在没有通配符证书的情况下执行此操作?
没有。原因是因为您有一个证书表明唯一有效的主机名是 example.com ,并且首先发生的是与Web服务器建立连接并建立SSL握手。此握手在任何HTTP通信发生之前发生。这意味着,在握手期间,浏览器会获得证书,其中显示“您应该只与 example.com 交谈”,浏览器会看到它只是尝试连接到“ www .example.com “,浏览器就在那里停止并返回您看到的异常。此异常不是来自服务器,而是浏览器说某些内容不正确。
由于所有这些都发生在甚至进行任何HTTP通信之前(因为它必须加密,并且在握手建立之前无法加密),因此无法做任何事情至于mod_rewrite或从apache重定向,因为Apache还没有收到请求。
答案 1 :(得分:0)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]
在.htaccess文件中添加以上代码 您的网址将重定向,如: https://www.example.com/test至 - &gt; https://example.com/test