Apache RewriteRule匹配任何不匹配的东西

时间:2013-12-04 20:34:34

标签: apache mod-rewrite

我试图在没有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显然不匹配,但它应匹配任何东西,如果不匹配?

1 个答案:

答案 0 :(得分:0)

  1. 确保已加载mod_proxy。除非你加载了mod_proxy,否则P标志将不会执行任何操作,并且在大多数安装中默认情况下并不总是加载它。

  2. 如果您在服务器/ vhost配置中执行此操作,请考虑单独使用mod_proxy。 ProxyPass(和ProxyPassMatch)基本上会执行您尝试执行的操作,您也可以反向代理Cookie和重定向:

    ProxyPassMatch ^/foobar/(.*)$ http://localhost:3333/foobar/$1