我想将子文件夹动态代理到另一台主机上的子域。例如,我对单个子文件夹到子域进行了以下反向代理设置:
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
答案1
您将需要使用重写条件来验证文件在代理之前不存在。
此外,只用一条规则就可以获得所需的行为:
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/