【问题标题】:Proxy URL redirection using perl使用 perl 的代理 URL 重定向
【发布时间】:2012-11-14 13:30:57
【问题描述】:

我想从 perl 做一个代理重定向。我一直在使用 Location Header 进行重定向。

    print ("Location: http://www.example.com\n");

问题在于客户端的 url 更改为新的(即 www.example.com )。我不希望这种情况发生,因此最终用户不知道我们从哪个位置提供请求。

【问题讨论】:

  • 您想成为代理还是重定向客户端? “代理重定向”没有意义。
  • 我想将用户重定向到不同的 url,但是最终用户应该无法在他的浏览器中看到它。基本上我想模拟使用 Rewrite 在 .htaccess 中可以实现的功能,即Options +FollowSymLinks RewriteEngine on RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^(.*)$ http://localhost/%1? [R=302,P] 在这里,我可以将用户重定向到不同的 url,而无需用户了解它。我们可以在 perl 中做到这一点吗?
  • 您的 RewriteRule 示例实际上会使用 302 重定向来重定向用户。如果您不希望用户在他们的浏览器中看到位置变化,您需要自己从所需的 URL 获取内容,并将其发送到用户的浏览器(请注意相关链接/图像等将不起作用除非您修复它们),或者输出一个框架集,该框架集在框架内加载内容,以便地址栏仍然包含脚本的 URL。
  • 其实再看一遍,你的 RewriteRule 是用“P”做代理,也用 R=302 做重定向。这没有任何意义。

标签: perl proxy perl-module http-redirect


【解决方案1】:

如果客户端要进行抓取,它将显示正在抓取的 URL,除非被抓取的页面嵌入到另一个页面中(例如,通过使用 iframe)。即使这样,用户也很容易通过查看来发现 url。

如果您确实想成为代理(并且所有迹象表明您是),也就是说您想获取一个文档并将其返回给客户端,那么您必须首先获取您的文档想返回给客户。

请注意,您可以将 apache 配置为 proxy

【讨论】:

  • 感谢您的回复。现在,我通过在我的 perl 程序中将隐式重定向到另一个文件夹来实现这一点。 print ("Location: /cgi-bin/test/hello.cgi?".$name."\n"); 然后使用该文件夹中的 .htaccess 文件进行代理重写。 Options +FollowSymLinks RewriteEngine on RewriteCond %{QUERY_STRING} ^(.*)$ RewriteRule ^(.*)$ http://localhost/%1? [P]我的问题不是这样做,我们可以直接从 perl 代码重定向,而最终用户不知道这个重定向。
  • "P" 使 Apache 充当代理,即获取文档并返回它。是的,你可以在 Perl 中做到这一点。您必须首先获取要返回给客户端的文档。然后通过打印适当的 HTTP 标头返回它,然后由 doc 本身打印。
  • 好的。所以你的意思不是 Apache 充当代理并获取文档,我们的 perl 程序将充当代理并通过读取整个文件并将其打印出来来获取文档。关于性能方面更好的方法有什么建议吗?
  • 大部分时间都花在等待响应上。我不确定代码的速度是否有很大的不同。使用 nph 脚本,您实际上不必等待获得整个内容,然后再开始重新发送它。但是我们正在谈论大量的工作,所以如果您可以使用 apache 来代替,那就太好了。使用 mod_perl(相对于 CGI),您可能有更多选择,因为您可以访问 apache 的 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
相关资源
最近更新 更多