это моя первая публикация здесь, если я что-то пропустил, пожалуйста, не беспокойтесь.
У меня есть правило 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 проблемы, с которыми я не могу справиться в одиночку:
Меня не перенаправляют, но если заменить «перезаписать ...» на «вернуть 404» ; " я получаю 404.
Если я запрошу index.php? soap = 123, а не только? soap = 123, он проигнорирует правило перезаписи и "выполнит" index.php
Мой полный nginx-config можно найти on: http://pastebin.com/ULRyNeZ4
Спасибо за вашу помощь!
У вас должна быть возможность использовать эту конфигурацию:
location / {
if ($arg_soap) {
rewrite ^ http://www.zam24.de/index.php?soap=$arg_soap redirect;
}
}
Здесь мы проверяем аргумент soap
в строке запроса. Если он найден, мы перезаписываем URL-адрес назначения и передаем аргумент soap
адресату перезаписи.
Нам не нужно использовать сопоставление / захват регулярных выражений, поскольку nginx уже имеет аргументы строки запроса доступны в переменных.