Переписать nginx не захватывать необязательное значение
Я переношу конфигурацию на новую CMS, и на текущей странице есть URL-адреса со структурой "/view-article/ID", некоторые сокращения ссылок добавили параметры до конца как "/view-article/ID/{RAMDON| неопределенный | другие}".
Я хочу перенаправить этот URL-адрес в новую структуру "/id/ID", но я делаю тесты на онлайн-издателях регулярных выражений PCRE, прежде чем вводить его в производство, и я не могу создать регулярное выражение, соответствующее URL-адресу CMS и к которому добавлено сокращение (отбрасываем параметры, которые добавляем).
Мои настройки в следующем:
location ~* ^/view-article {
#rewrite ^/view-article/(.*)(?:\/.+) $scheme://$host/id/$1 permanent;
rewrite ^/view-article/(.*) $scheme://$host/id/$1 permanent;
}
Примеры текущего URL и должны быть в новой CMS:
/view-article/45356 -> /id/45356
/view-article/4a57f -> /id/4a57f
/view-article/4a57f/undefined -> /id/4a57f
/view-article/4a57f/ramdon -> /id/4a57f
/view-article/4a57f/88484 -> /id/4a57f
/view-article/aabb3/jddt65 -> /id/aabb3
Вы считаете, что это правильно? Как мне заставить это работать? Спасибо
1 ответ
Вы не хотите захватывать все, только текст от идентификатора до следующего слеша, если таковой имеется. Так (.*)
не будет делать то, что вы хотите, так как он просто захватывает все.
Скорее захватывайте до следующего слеша (если он существует):
rewrite ^/view-article/([^/]+) /id/$1 permanent;
(Также нет причин восстанавливать весь URL-адрес самостоятельно, когда будет достаточно относительного URL-адреса. Также нет причин помещать это в специальный location
так что не беспокойтесь.)