我想用一个相同的主机名将一个子域名反向注册到另一个域名。
例:
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
响应将不会被翻译。