build立:
使用这种方法有可能是错误的,但现在可以使用。
虚拟主机设置:
# secure domain 1 <VirtualHost IP:443> SSL stuff specifying certificate etc. ServerName domain1.org </VirtualHost> # secure domain 2 <VirtualHost IP:81> SSL stuff for domain2.org ServerName domain2.org </VirtualHost>
目标: domain2.org docroot中的一些文件夹需要安全。 我使用.htaccess文件将URL重写为端口81上的https:
RewriteEngine On RewriteCond %{SERVER_PORT} !^81$ RewriteRule (.*) https://%{HTTP_HOST}:81%{REQUEST_URI} [R]
假设我把.htaccess放在文件夹' secfolder '中。
访问http://domain2.org/secfolder将成功重写为https://domain2.org:81 / secfolder。
问题:在访问https://domain2.org/secfolder (不包含端口81)时,会使用来自第一个虚拟主机(domain1.org)的证书,并且由于该证书对于domain2无效,因此浏览器会抱怨该网站不安全。有机
我认为RewriteCond %{SERVER_PORT} !^81$也会将https://domain2.org重写为https://domain2.org:81 , 但事实并非如此 。 在这种情况下,似乎.htaccess文件没有被使用。
在这一点上,我不知道如何将一个RewriteRule应用到https://domain2.org 。 我尝试在domain1.org之前为端口443上的domain2创build一个额外的虚拟主机,但Apache似乎扼杀了这一点。 我希望你们有一个想法如何解决这个问题。 TIA。
编辑:有一个已被删除的答案,但它说:
“如果没有首先validation证书,并且由于证书是针对错误的域,则无法连接到服务器,因此无法redirect。 证书不匹配真的是行结束吗? 之后没有强制redirect/ URL重写?
请记住,当您与HTTPS连接到https://domain2.org (这实际上是https://domain2.org:443的连接)时,顺序大致是
即当Apache决定发送哪个证书时,它还没有收到mod_rewrite用来做redirect的信息。
为了解决这个问题,你需要一个对两个域都有效的证书。 这可以是通配符证书(如果情况是domain1.example.com和domain2.example.com,为* .example.com获取证书),或者您可以尝试获取主题为“domain1 .org“,而是”domain2.org“的主题替代名称 。
无论哪种情况,您都需要在Apache主configuration文件中进行redirect – 如果它位于domain2.org的DocumentRoot中的.htaccess文件中,那么使用domain1.org的VirtualHost的请求将转到不同的DocumentRoot目录,永远不会看到文件。
您是否拥有某种通配符证书,或者您是否尝试在同一IP上使用不同的SSL证书托pipe不同的域?
如果不是通配符,则无法执行此操作,因为每个IP地址只能使用一个SSL证书,而不pipe其端口是什么端口。