【发布时间】:2012-09-13 23:57:04
【问题描述】:
我正在尝试让较旧的 Apache (2.2.17) 进行代理:
http://foo.com/proxy/?url=http%3A%2F%2Fbar.com%2foo
到:
我有:
RewriteCond %{QUERY_STRING} ^url=(.*)$
重写规则 ^/proxy/ %1? [P,L]
不幸的是,这导致 Apache 尝试代理 URL 编码值(日志输出):
(3) 将模式 '^/proxy/' 应用到 uri '/proxy/'
(4) RewriteCond: input='url='http%3A%2F%2Fbar.com%2foo'' 模式='^url=(.*)$' => 匹配
(2) 重写'/proxy/' -> ''http%3A%2F%2Fbar.com%2foo'?'
(3) 拆分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) go-ahead with proxy request proxy:http://foo.com/'http%3A%2F%2Fbar.com%2foo' [OK]
所以,看来有两个问题。一种是结果中有撇号,另一种是结果没有经过 URL 解码。我认为 Apache 将原始协议添加到主机之前的原因是它没有将结果视为 URL。
【问题讨论】: