我有一个带有一个IP地址的虚拟服务器,可以为几个不同的站点提供服务。其中一个上面有SSL证书。
我需要在第二个域上添加SSL证书以供我自己私人使用,因为我只有一个IP地址,所以我将其添加到端口8080上。这很好用。
现在我的问题是,如果在该域上请求端口8080,则指向服务器的所有域都将显示我的私有站点。
https://example1.com:8080/ -> will show my private site, but shouldn't
https://example2.com:8080/ -> will show my private site, but shouldn't
https://desired-domain.com:8080/ -> will show my private site, this is correct!
任何访问https://example1.com:8080/
的人都应该被重定向到http://example1.com/
,example2.com
也是如此。
我试过......
RewriteCond %{HTTP_HOST} !desired\-domain\.com [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [L,R=301]
...但该端口附加到HTTP_HOST,因此它显示为http://example1.com:8080/
因此,简而言之,我的问题是:如何重定向到请求的主机,但忽略请求端口?
的 EXTRA 的
我试过这个......
RewriteCond %{HTTP_HOST} !(desired-domain.com):8080$ [NC]
RewriteRule ^(.*)$ http://%1$1 [L,R=301]
...但重定向到http://localhost/
。然而,这比显示错误网站的页面更好,因为无论如何没有人应该在任何其他域上请求端口8080!
我怀疑有一个更好的'desired-domain.com'正则表达式,但我的正则魔法今天不流动。
答案 0 :(得分:1)
也许试试:
RewriteCond %{HTTP_HOST} ^(example[12].com):8080$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
显然,你需要对你的HTTP_HOST正则表达式有点聪明,如果没有简单的方法将你的example1和example2域封装在一个正则表达式中,你可以有2个然后使用 [ OR] 强>:
RewriteCond %{HTTP_HOST} ^(example1.com):8080$ [NC,OR]
RewriteCond %{HTTP_HOST} ^(example2.com):8080$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
编辑:
您无法匹配!(desired-domain.com):8080$
等反向引用,因为!表示与不匹配。但你可以尝试这样的事情:
RewriteCond %{HTTP_HOST} !^desired-domain.com(:8080)?$ [NC]
RewriteCond %{HTTP_HOST} ^(.*):8080$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]