我正在尝试使用Apache构建反向代理。
我的目标是将<subdomain>.domain.com/file.html
表单的所有请求代理到www.domain.com/<subdomain>/file.html
。
我不知何故需要捕获原始网址的<subdomain>
并使用它来构建目标网址。
我认为我需要一个Apache指令,它可以匹配整个URL上的正则表达式,而不是%{HTTP_HOST}
之后的url部分,因为我的目标URL包含原始URL的子域。出于这个原因,我无法使用ProxyPassMatch
指令,因为它只匹配%{HTTP_HOST}
之后的网址部分。
另一种方法是使用与我的子域一样多的VirtualHost
个部分。但当然这个解决方案没有意义,因为我的子域名会不断增加。
有关如何解决此问题的任何提示?
答案 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。