Назад | Перейти на главную страницу

Apache - Как перенаправить пользователя на указанный URL

На моем веб-сайте у меня есть междоменные запросы с иногда ответами HTTP 302.

Я хочу сделать две вещи:

Поскольку URL-адреса для получения и публикации различны (несколько API), я сделал что-то вроде этого:

http://myproxyurl.com?service=http://myapi.com (с закодированным URL myapi.com)

Вот мой прокси-хост:

<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

Как я могу исправить этот повторный цикл? Я открыт для лучшего решения, чем "? Service =", если таковое имеется.

Спасибо за помощь.

РЕДАКТИРОВАТЬ: New Vhost conf

С участием : Мод-прокси с альтернативами строки запроса? Я близок к решению ... но все равно получаю код 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-адрес в параметр службы ... в моем случае я могу доверять пользователям.