例如我想建立一个正向代理,将对 a.com、b.com、c.com 的 HTTP 请求转发到 a.mirror.com、b.mirror.com、c.mirror.com。
目前我必须配置 3 个 vhosts 为:
host-a:
ServerName a.com
ProxyPass / http://a.mirror.com/
host-b:
ServerName b.com
ProxyPass / http://b.mirror.com/
host-c:
ServerName c.com
ProxyPass / http://c.mirror.com/
有没有办法重写 http 请求的域部分?如:
ProxyPassMatch http://(.*).com/ http://$1.mirror.com/
我想知道我是否必须通过 RewriteRules 来做到这一点,但我不知道如何准确编写规则以及 RewriteRule 与 ProxyPass 的性能,但性能不是一个大问题。
答案1
根据您具体设置的细节,可以使用 mod_rewrite 来完成此操作。您可能会匹配 HTTP_HOST,删除所需的主机名部分,并将其添加到 .mirror.com 上,然后使用 mod_rewrite 的 [P] 标志来启用代理。
这不完全是你想要的,但它可能会让你更接近一点:
http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#uservhosts
答案2
你想要这样的东西:
RewriteCond %{HTTP_HOST} ^(.*)\.com
RewriteRule (.*) %{SERVER_PROTOCOL}://%1.mirror.com$1 [P]
(未经测试。)