我正在尝试使用较旧的 Apache (2.2.17) 进行代理:
http://foo.com/proxy/?url=http%3A%2F%2Fbar.com%2foo
到:
我有:
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=(. *)$' => 匹配
(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) 继续代理请求 proxy:http://foo.com/'http%3A%2F%2Fbar.com%2foo' [OK]
所以,看来有两个问题。一种是结果中有撇号,另一种是结果没有经过 URL 解码。我认为 Apache 在原始协议之前添加的原因://主机是它没有将结果视为 URL。