我试图在没有Apache弄乱urlencoded路径内容的情况下代理流量。在搜索这个问题时,我找到了这个解决方案
AllowEncodedSlashes On
RewriteEngine on
RewriteCond %{THE_REQUEST} "^[a-zA-Z]+ /foobar/(.*) HTTP/\d\.\d$"
RewriteRule ^(.*)$ http://localhost:3333/foobar/%1 [P,L,NE]
因此,任何进入/ foobar /的东西都应该被代理到3333端口的localhost。我运气不好。
10.36.163.39 - - [04/Dec/2013:15:32:21 --0500] [10.38.200.253/sid#11037e0][rid#117cd68/initial] (2) init rewrite engine with requested uri /foobar/msl/v1/configuration/
10.36.163.39 - - [04/Dec/2013:15:32:21 --0500] [10.38.200.253/sid#11037e0][rid#117cd68/initial] (3) applying pattern '^(.*)$' to uri '/foobar/msl/v1/configuration/'
10.36.163.39 - - [04/Dec/2013:15:32:21 --0500] [10.38.200.253/sid#11037e0][rid#117cd68/initial] (1) pass through /foobar/msl/v1/configuration/
代理没有发生,因为RewriteRule显然不匹配,但它应匹配任何东西,如果不匹配?
答案 0 :(得分:0)
确保已加载mod_proxy。除非你加载了mod_proxy,否则P
标志将不会执行任何操作,并且在大多数安装中默认情况下并不总是加载它。
如果您在服务器/ vhost配置中执行此操作,请考虑单独使用mod_proxy。 ProxyPass
(和ProxyPassMatch
)基本上会执行您尝试执行的操作,您也可以反向代理Cookie和重定向:
ProxyPassMatch ^/foobar/(.*)$ http://localhost:3333/foobar/$1