Рейтинг:2

Nginx перенаправляет на другой домен без завершающего uri

флаг us

я пытаюсь получить http://foo.mydomain.xyz/one/two/three.json позвонив http://bar.mydomain.xyz/cat/one/two/three.json. Я использую следующую конфигурацию:

сервер {
        слушать 80;
        слушать [::]:80;
        имя_сервера bar.mydomain.xyz;
        абсолютная_переадресация выключена;

        место расположения / {
          proxy_pass http://localhost:8080;
        }

        местоположение / кошка {
          переписать ^(/cat) http://foo.mydomain.xyz$request_uri на постоянный;
        }
}
сервер {
        слушать 80;
        слушать [::]:80;
        имя_сервера foo.mydomain.xyz;

        место расположения / {
          прокси_пароль http://localhost:7070;
        }
}

Используя эту конфигурацию, когда я звоню: http://bar.mydomain.xyz/cat/ он перенаправляет меня на http://foo.mydomain.xyz/ успешно. Но когда я звоню http://bar.mydomain.xyz/cat/one/two/three.json он возвращается http://foo.mydomain.xyz/cat/one/two/three.json. Обратите внимание на /кот не удаляется из URL. Как я могу это решить?

Richard Smith avatar
флаг jp
`$request_uri` — это исходный URI, вам нужно захватить последнюю часть URI в регулярном выражении `rewrite`. Попробуйте: `переписать ^/cat/(.*)$ http://foo.mydomain.xyz/$1 навсегда;`
флаг us
@RichardSmith Вы можете опубликовать это как ответ. Спасибо
Рейтинг:1
флаг us

Другой подход заключается в том, чтобы захватить часть в место расположения директива:

место расположения / {
    proxy_pass http://localhost:8080;
}

расположение ~ ^/cat(/.+)$ {
    вернуть 301 http://foo.example.com$1$is_args$args;
}
флаг us
Он возвращает «недопустимое количество аргументов в директиве return» в /etc/nginx/sites-enabled/mydomain.com:19.
флаг us
Извините, моя ошибка, я оставил там лишнее слово «постоянный».
флаг us
@tero-kilman, в моем случае я пытаюсь перейти на https://foo.mydomain.xyz/bar/v1/search?text=mytext&size=25 с https://bar.mydomain.xyz/v1. /search?text=mytext&size=25`. Когда я пытаюсь «вернуться», он перенаправляется только на часть «https://bar.mydomain.xyz/v1/search». Параметры не проходят.
флаг us
Я добавил аргументы для перенаправления в своем ответе.
Рейтинг:1
флаг jp

Твой переписать заявление меняет доменное имя, но ничего больше. Значение $request_uri исходный URI, включая начальный /кот часть. Вам нужно захватить последнюю часть URI в регулярном выражении.

Например:

переписать ^/cat/(.*)$ http://foo.example.com/$1 навсегда;

Или, может быть:

переписать ^/cat(?:/(.*))?$ http://foo.example.com/$1 постоянный;
флаг us
в моем случае я пытаюсь перейти на `https://foo.mydomain.xyz/bar/v1/search?text=mytext&size=25` с `https://bar.mydomain.xyz/v1/search?text= мой текст&размер=25`.Когда я пытаюсь «переписать», он перенаправляется только на часть «https://bar.mydomain.xyz/v1/search». Параметры не проходят.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.