我想dynamic代理子文件夹到另一个主机上的子域。 例如,我有以下反向代理设置为单个子文件夹到子域:
ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /app1/ http://app1.myotherserver.tld/ ProxyPassReverse /app1/ http://app1.myotherserver.tld/
上述工作正常(除了尾随的“/”问题)。 但是,我需要添加另外10个,就像它,app2,app3,app4等…也许在未来更多。 添加每一个显然是没有意义的。
使用http://httpd.apache.org/docs/current/rewrite/proxy.html的页面作为参考,我这样做:
RewriteRule ^/(.*)/$ http://$1.myotherserver.tld/ [P] RewriteRule ^/(.*)/(.*)$ http://$1.myotherserver.tld/$2 [P] ProxyPassReverse /$1/ http://$1.myotherserver.tld/
这样的作品,但我现有的子文件夹被拉入该规则,我仍然有问题的尾随“/”。
我尝试添加“?” 遵循第一条规则,但是这打破了一切:
RewriteRule ^/(.*)?/$ http://$1.myotherserver.tld/ [P]
我如何使“http; // www.mywebserver.tld / app2”这样的东西工作,但仍然允许这些有效的URL仍然工作?
http://www.mywebserver.tld/style.css http://www.mywebserver.tld/images/title.png http://www.mywebserver.tld/existingsubfolder http://www.mywebserver.tld/existingsubfolder/page.php
在代理之前,您需要使用重写条件来validation文件不存在。
另外,应该能够通过一条规则来获得所需的行为:
RewriteCond /path/to/docroot%{REQUEST_URI} !-f RewriteCond /path/to/docroot%{REQUEST_URI} !-d RewriteRule ^/[^/]*/(.*)$ http://$1.myotherserver.tld/ [P] ProxyPassReverse /$1/ http://$1.myotherserver.tld/