http://foo.com/proxy/?url=http%3A%2F%2Fbar.com%2foo
至:
http://bar.com/foo
我有:
RewriteCond%{QUERY_STRING} ^ url =(。*)$
RewriteRule ^ / proxy /%1? [P,L]
不幸的是,这导致Apache尝试代理URL编码值(日志输出):
(3)将模式'^ / proxy /'应用于uri'/ proxy /'
(4)RewriteCond:input ='url ='http%3A%2F%2Fbar.com%2foo''pattern ='^ url =(。*)$'=> matching
(2)重写'/ proxy /' – >''http%3A%2F%2Fbar.com%2foo'?'
(3)split uri ='http%3A%2F%2Fbar.com%2foo'? – > uri ='http%3A%2F%2Fbar.com%2foo',args =
(2)用http://foo.com/“http%3A%2F%2Fbar.com%2foo ”强制代理吞吐量
(1)继续与代理请求代理:http://foo.com/'http%3A%2F%2Fbar.com%2foo'[确定]
所以,看来有两个问题。 一个是结果中有撇号,另一个是结果不是URL解码。 我假定Apache的原因在于原来的协议://主机是它看不到结果作为一个URL。
如果你有权访问vhost / server config(和你一样),你可以为你的unescape配置一个apache的内置重写映射:
RewriteMap unescape int:unescape
那么你可以在你的规则中使用地图:
RewriteCond %{QUERY_STRING} ^url=(.*)$ RewriteRule ^/proxy/ ${unescape:%1}? [P,L]