Назад | Перейти на главную страницу

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;

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

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

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

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

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

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