Извлечение 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
потому что регулярное выражение для этой части находится внутри скобок.
Если вы хотите более подробно остановиться на регулярных выражениях, в Интернете есть множество инструментов регулярных выражений, где вы можете протестировать свои модификации.