Apache – 如何将用户redirect到给定的URL

在我的网站中,我有一些跨域请求,有时候会有HTTP 302响应。

我想做两件事情:

  • 对于HTTP OPTIONS请求:HTTP代码200,不遵循redirect
  • 对于HTTP POST,GET请求:跟随一个新的URL并且在需要时执行所有的302。

随着url后跟url(多个API),我做了这样的事情:

http://myproxyurl.com?service=http://myapi.com (用myapi.comurl编码)

这是我的代理虚拟主机:

<VirtualHost *:80> DocumentRoot "C:/..." ServerName http://myproxyurl.com Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS" Header always set Access-Control-Max-Age "1000" Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token" RewriteEngine on RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L] RewriteCond %{QUERY_STRING} ^service=(.*) RewriteRule (.*) $1 [R,L] </VirtualHost> 

但有了它,我已经像Chrome一样在Chrome上redirect循环: Chromenetworking标签屏幕截图

我怎样才能解决这rediect循环? 我打开比“?service =”更好的解决scheme,如果有的话。

感谢帮助。

编辑:新的Vhost conf

与: 查询string替代的Mod-proxy? 我接近解决scheme…但仍然得到一个代码500

 <VirtualHost *:80> LogLevel alert rewrite:trace8 DocumentRoot "C:/..." ServerName myproxyurl.com Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS" Header always set Access-Control-Max-Age "1000" Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token" AllowEncodedSlashes On RewriteEngine on RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L] RewriteMap unescape int:unescape RewriteCond %{QUERY_STRING} ^service=(.*)$ RewriteRule ^/ ${unescape:%1} [P,L] </VirtualHost> 

最后的VHOST:

 <VirtualHost *:80> DocumentRoot "C:/..." ServerName myproxyurl.com Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS" Header always set Access-Control-Max-Age "1000" Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token" RewriteEngine on RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L] RewriteMap unescape int:unescape RewriteCond %{QUERY_STRING} ^service=(.*)$ RewriteRule ^/ ${unescape:%1} [P,NE,R=302,L] </VirtualHost> 

不知道是否所有这些线/标志是必需的,但是,我得到的结果!

你必须启用这些Apache模块:

  • mod_rewrite的
  • proxy_module
  • proxy_http_module
  • headers_module

高兴知道 :我读了这个方法是不安全的,因为任何人都可以在服务参数中放置任何URL …在我的情况下,我可以信任用户。