Apache RewriteRule删除任何域名上的端口

我有一个虚拟服务器与一个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/任何人都应该redirect到http://example1.com/也是如此。

我试过了…

RewriteCond %{HTTP_HOST} !desired\-domain\.com [NC]

RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [L,R=301]

…但端口被附加到HTTP_HOST,所以它出现为http://example1.com:8080/

所以,总之,我的问题是:我如何redirect到请求的主机,但忽略请求端口?


额外

我试过这个…

RewriteCond %{HTTP_HOST} !(desired-domain.com):8080$ [NC]

RewriteRule ^(.*)$ http://%1$1 [L,R=301]

…但redirect到http://localhost/ 。 但是,比显示错误的网站页面更好,因为无论如何,任何人都不应该在任何其他域上请求端口8080!

我怀疑有一个更好的“desired-domain.com”正则expression式,但我的正则expression式mojo今天没有stream动。

也许尝试:

 RewriteCond %{HTTP_HOST} ^(example[12].com):8080$ [NC] RewriteRule ^(.*)$ http://%1/$1 [L,R=301] 

很显然,如果在一个正则表达式中没有简单的方法将example1和example2域封装在一个正则表达式中,那么你需要对HTTP_HOST正则表达式有一些巧妙的理解,那么你可以使用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$的反向引用!(desired-domain.com):8080$ 意味着它不匹配 。 但你可以尝试这样的事情:

 RewriteCond %{HTTP_HOST} !^desired-domain.com(:8080)?$ [NC] RewriteCond %{HTTP_HOST} ^(.*):8080$ [NC] RewriteRule ^(.*)$ http://%1/$1 [L,R=301]