Преобразование правила перезаписи htaccess в nginx

это моя первая публикация здесь, если я что-то пропустил, пожалуйста, не беспокойтесь.

У меня есть правило htaccess:

RewriteCond %{QUERY_STRING} ^soap=([^&]+)
RewriteRule ^/?index\.php$ http://backendserver.com  /index.php?soap=%1 [L,R=302]

Запросы:

http://frontend.com/?soap=123 
http://frontend.com/index.php?soap=123

перенаправляют меня на Backend-сервер. Все идет нормально.

Теперь я пытаюсь перейти с apache2 на nginx.

location / {
if ($args ~ "^soap=([^&]+)"){
   #return 404;
   rewrite ^/?index\.php$ http://www.zam24.de/index.php?soap=%1 redirect;
}

Теперь у меня 2 проблемы, с которыми я не могу справиться в одиночку:

  1. Меня не перенаправляют, но если заменить «перезаписать ...» на «вернуть 404» ; " я получаю 404.

  2. Если я запрошу index.php? soap = 123, а не только? soap = 123, он проигнорирует правило перезаписи и "выполнит" index.php

Мой полный nginx-config можно найти on: http://pastebin.com/ULRyNeZ4

Спасибо за вашу помощь!

0
задан 1 September 2016 в 17:40
1 ответ

У вас должна быть возможность использовать эту конфигурацию:

location / {
    if ($arg_soap) {
         rewrite ^ http://www.zam24.de/index.php?soap=$arg_soap redirect;
    }
}

Здесь мы проверяем аргумент soap в строке запроса. Если он найден, мы перезаписываем URL-адрес назначения и передаем аргумент soap адресату перезаписи.

Нам не нужно использовать сопоставление / захват регулярных выражений, поскольку nginx уже имеет аргументы строки запроса доступны в переменных.

0
ответ дан 5 December 2019 в 09:35

Теги

Похожие вопросы