Apache 将SSL短名称重定向到FQDN

Apache 将SSL短名称重定向到FQDN,apache,Apache,我为内部web服务器购买了SSL证书,并且只有在使用服务器的FQDN时它才有效。有没有办法在httpd.conf中使用重写规则来实现这一点?我已经有两条规则,它们是: RewriteCond %{HTTP_HOST} !^web2\.internal\.domain\.com [NC] RewriteCond %{HTTP_HOST} !^$ RewriteCond %{SERVER_PORT} ^80$ RewriteRule ^/(.*) https://web2.i

我为内部web服务器购买了SSL证书,并且只有在使用服务器的FQDN时它才有效。有没有办法在httpd.conf中使用重写规则来实现这一点?我已经有两条规则,它们是:

RewriteCond %{HTTP_HOST}   !^web2\.internal\.domain\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/(.*)         https://web2.internal.domain.com/$1 [L,R]

RewriteCond %{HTTP_HOST}   ^web2\.internal\.domain\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/(.*)         https://web2.internal.domain.com/$1 [L,R]
我使用这些命令将http强制转换为https,一个用于短名称,一个用于FQDN


谢谢

根据您的评论,我认为问题在于,您的两个规则都测试了SERVER_PORT=80,如果您通过https访问,则不匹配。以下是一条适用于您的案例的合并规则:

RewriteCond %{HTTP_HOST}   !^web2\.internal\.domain\.com$ [NC,OR]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$         https://web2.internal.domain.com$1 [L,R]

这两个条件检查站点是否由不同的域(例如,仅web2)访问,或者是否在整个域上但通过端口80而不是SSL访问。如果这两种情况都是真的,那么用户将被重定向到具有完整域的https。

您的最终目标似乎是让此web服务器的所有流量都能在https://web2.internal.domain.com. 这是正确的吗?如果是这样,可以将这两个规则合并为一个规则,并通过仅检查a(如果端口为80)或b(如果域不是FQDN)来简化。如果其中一个为真,则重定向到https和FQDN。“我还缺少什么额外的复杂性吗?@David-可能是在吹毛求疵,但FQDN以一个点结束。”。所以www.和www.example.com。都被认为是完全合格的。事实上,我经常用它来做一些事情,比如用它连接到私有网络中的服务器https://wiki. 和https://wiki.example.comAgreed 我可以简化重写规则,但如果。。。。。是在浏览器中输入的内容。使用http://..... 一切都很完美。我错过什么了吗?另外,谢谢你的帮助。换句话说,重写规则只适用于http到https。当我使用https和非FQDN时,这个选项不起作用。David,谢谢你的更新,但是我真的没有比以前更接近。以下是有效和无效的方法:->成功重定向到https…->成功重定向到https…->没有重定向到我很欣赏缩短我的重写规则。如果有任何方法可以让最后一部分工作,我感谢你的帮助。我以前从未使用过如此短的域,但是如果规则没有抓住关键点https://web2/ 在这种情况下,如果没有达到规则,我会在之前添加一个故障排除规则,比如将test.txt的所有请求重定向到test2.txt,并确保该规则触发https://web2/test.txt 或者b HTTP_主机实际上包含完整的域,要么是由于客户端在其请求日志中对其进行了扩展,以查看是否发生了这种情况,要么是Apache填充了整个域,不确定配置会执行什么操作,但可能会检查UseCononicalName。