Я переношу новые сборки существующего сайта на новый сервер с помощью 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;
}
Использование расположение
является предпочтительным способом сделать такие вещи в nginx. ~
указывает nginx использовать сопоставление регулярных выражений для поиска местоположения. Строка после этого и перед {
является фактической строкой регулярного выражения.
Здесь мы сопоставляем любую строку, которая имеет любые символы в начале, за которыми следует -ABC-
, а затем любые числа , а затем оканчивается суффиксом .html
.
Числа записываются в переменную $ 1
, поскольку регулярное выражение для этой части заключено в круглые скобки.
Если вы хотите Чтобы подробнее проработать регулярное выражение, в Интернете есть множество инструментов для работы с регулярными выражениями, где вы можете проверить свои изменения.