2

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

我不知何故需要捕获<subdomain>原始 URL 并使用它来构造目标 URL。

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

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

关于如何解决这个问题的任何提示?

4

1 回答 1

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匹配 URL 与.domain.com/匹配的所有传入请求
  • RewriteRule将请求代理到 URL http://www.domain.com/%1/%2,其中%1%2分别是原始请求的子域和请求 uri。
于 2012-09-30T16:27:08.257 回答