Извлечение nginx из request_uri и добавление его в пункт назначения перенаправления

В настоящее время я перемещаю новые сборки существующего сайта на новый сервер, используя nginx, и мне сказали, что URL-адрес должен указывать на новый файл PHP, чтобы определить, как выбрать дату из новой БД.

Пример входящего URL будет:

https://testsite.com/test-account-here-ABC-123456.html

Это должно быть перехвачено nginx и перенаправлено на

https://testsite.com/profiles.php

где файл сделает свой бит и извлечет URL, чтобы получить его детали и выполнить поиск.

Я установил перенаправление на предпосылке, которую $request_uri находит **-ABC-* в URL-адресе, вот так:

if ($request_uri ~ ^/(.*)-ABC-)
{
    return 302 $scheme://testsite.com/profile.php;
}

который успешно идет к этому файлу PHP, но мне нужно иметь возможность извлечь числа из URL (123456), чтобы я мог получить к ним доступ через строку запроса в файле PHP, я пытался пользователя

return 302 $scheme://testsite.com/profile.php?url=$request_uri;

но это возвращает полный URL, который вызывает бесконечный цикл перенаправления и браузер к ошибке.

Есть ли в любом случае вы можете извлечь части $request_uri для повторного использования в перенаправлении?

Нечто подобное

return 302 $scheme://testsite.com/profile.php?url=$variable1;

1 ответ

Решение

Если числа всегда перед .html суффикс, вы можете использовать эту конфигурацию:

location ~ ^/.+-ABC-([0-9]+)\.html$ {
    return 302 $scheme://testsite.com/profile.php?url=$1;
}

С помощью location это предпочтительный способ делать подобные вещи в nginx. ~ говорит nginx использовать сопоставление регулярных выражений для поиска местоположения. Строка после этого и до { фактическая строка регулярного выражения.

Здесь мы сопоставляем любую строку, которая имеет любые символы в начале, а затем -ABC- а затем любые цифры, а затем заканчивая .html суффикс.

Числа фиксируются в переменной $1потому что регулярное выражение для этой части находится внутри скобок.

Если вы хотите более подробно остановиться на регулярных выражениях, в Интернете есть множество инструментов регулярных выражений, где вы можете протестировать свои модификации.

Другие вопросы по тегам