如何将一个子域名的主机名反转到不同的域名?

我想用一个相同的主机名将一个子域名反向注册到另一个域名。

例:

fitzefatze.sourcedomain.com应该得到的内容:

fitzefatze.targetdomain.com

这应该是dynamic的,以便每个主机名将被转换为目标域名。

我想这可以通过ProxyPass指令来完成,但我不知道如何获取目标的主机名:

像这样的ServerName * .sourcedomain.com

ProxyRequests Off <Proxy *> AddDefaultCharset off Order deny,allow Allow from all # </Proxy> ProxyPass / $1.targetserver.com 

有ProxyPassMatch指令,但它指定了以下限制:

在正则expression式replace之前(以及之后),URL参数必须可parsing为URL。 这限制了你可以使用的匹配。 例如,如果我们使用过

ProxyPassMatch ^(/.*。gif)$ http://backend.example.com:8000 $ 1

在我们之前的例子中,在服务器启动时会出现语法错误。 这是一个bug(ASF bugzilla中的PR 46665),解决方法是重新匹配:

ProxyPassMatch ^ /(。* .gif)$ http://backend.example.com:8000/ $ 1

我不知道它是否会接受http://$1.targetserver.com作为一个有效的URL之前replace – 试试看,让我们知道!

正如Shane所提到的,你也可以使用mod_rewrite,但是你应该知道mod_rewrite所做的代理并不使用连接池 – 每个新的请求都会创build一个新的代理连接。 因此,您将无法从ProxyPass完成的持续连接池中受益,也无法使用ProxyPass提供的每个连接池选项(keepalive,timeout,connectiontimeout,retry,min / max)来微调其行为等)。

请注意,对于其他替代scheme,似乎没有匹配的ProxyPassReverseMatch指令。

要做到这一点,你需要使用mod_rewrite ..

 RewriteCond %{HTTP_HOST} ^(.*)\.sourcedomain\.com$ RewriteRule ^/(.*)$ http://%1.targetdomain.com/$1 [P,L] 

请记住, ProxyPassReverse不会在这里工作,所以任何30x响应将不会被翻译。