内部Tomcat服务器,其webapps监听8080:
的的 “http://内部:8080 /富Web网页/”
的的 “http://内部:8080 /富-网站/”
面向外部的Apache服务器代理子域的请求:
的 “http://foo.domain.com/”
子域根目录的任何请求都将代理到Tomcat上的foo-website webapp。
任何其他请求都将代理到相应的路径/ webapp
请求:
的 “http://foo.domain.com/index.html”
代理:
的的 “http://内部:8080 /富-网站/ index.html中”
请求:
的 “http://foo.domain.com/webservice/listener.html?param1=foo¶m2=bar”
代理:
的的 “http://内部:8080 /富Web网页/ listener.html参数1 = FOO&安培; param2的=栏”
满足用例B的当前虚拟主机定义:
<VirtualHost *:80>
ServerName foo.domain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ErrorLog /var/log/apache2/foo_error.log
LogLevel warn
CustomLog /var/log/apache2/foo_access.log combined
# RewriteRules
# ?
# ProxyPass
ProxyPreserveHost On
ProxyPass / http://internal:8080/
ProxyPassReverse / http://internal:8080/
</VirtualHost>
# RewriteRules
RewriteEngine On
RewriteRule ^/(.*) http://internal:8080/foo-website/$1 [P]
# RewriteRules
RewriteEngine On
RewriteRule ^/$ http://internal:8080/foo-website/$1 [P]
答案 0 :(得分:2)
ProxyPass规则按顺序匹配
ProxyPass /webservice/ http://internal:8080/foo-webservice/
ProxyPassReverse /webservice/ http://internal:8080/foo-webservice/
ProxyPass /website/ http://internal:8080/foo-website/
ProxyPassReverse /website/ http://internal:8080/foo-website/
ProxyPass / http://internal:8080/foo-website/
ProxyPassReverse / http://internal:8080/foo-website/
没有重写规则。那还不够好吗?
答案 1 :(得分:0)
我认为您需要使用第一次尝试,但在每个RewriteRule
指令末尾的方括号中包含QSA(查询字符串追加)标记。
答案 2 :(得分:0)
我认为尝试2的问题(没有映射js,img或css文件夹中的文件)表明我的方法是错误的。
我现在的解决方案是将任何请求重定向到根目录,再转移到 foo-website webapp。
<VirtualHost *:80>
ServerName foo.domain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ErrorLog /var/log/apache2/foo_error.log
LogLevel warn
CustomLog /var/log/apache2/foo_access.log combined
# RewriteRules
RewriteEngine On
RewriteRule ^/$ /foo-website/ [R]
# ProxyPass
ProxyPreserveHost On
ProxyPass / http://internal:8080/
ProxyPassReverse / http://internal:8080/
</VirtualHost>
这不是我原本想要的,但我认为这是决议。