使用Apache将一个域的所有子域代理到另一个域

时间:2012-09-30 15:16:35

标签: apache reverse-proxy subdomain wildcard-subdomain

我正在尝试使用Apache构建反向代理。 我的目标是将<subdomain>.domain.com/file.html表单的所有请求代理到www.domain.com/<subdomain>/file.html

我不知何故需要捕获原始网址的<subdomain>并使用它来构建目标网址。

我认为我需要一个Apache指令,它可以匹配整个URL上的正则表达式,而不是%{HTTP_HOST}之后的url部分,因为我的目标URL包含原始URL的子域。出于这个原因,我无法使用ProxyPassMatch指令,因为它只匹配%{HTTP_HOST}之后的网址部分。

另一种方法是使用与我的子域一样多的VirtualHost个部分。但当然这个解决方案没有意义,因为我的子域名会不断增加。

有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:1)

好的,我设法使用重写规则来解决它。

# Requires Apache module ``proxy_http``, ``rewrite``
<VirtualHost *:80>
    ServerName primary.domain.com
    ServerAlias *.domain.com

    ProxyRequests Off
    <Proxy *>
         Order deny,allow
         Allow from all
    </Proxy>

    RewriteEngine On

    RewriteCond %{HTTP_HOST}/%{REQUEST_URI} ^(.*)\.domain\.com/(.*)$
    RewriteRule (.*)    http://www.domain.com/%1%2 [P]

 </VirtualHost>

基本上会发生这样的事情:

  • RewriteCond会匹配其网址与 .domain.com /
  • 匹配的所有传入请求
  • RewriteRule代理对网址http://www.domain.com/%1/%2的请求,其中%1%2是子域名,并分别请求原始请求的uri。