Рейтинг:1

Перенаправление Ngnix для многоуровневых подкаталогов

флаг ma

У меня есть URL-адрес, подобный следующей структуре:

xyz/asset.html
abc/test.html
xyz/abc/test.html
xyz/abc/qwerty/test2.html

Я хотел бы перенаправить:

xyz/asset.html в xyz/asset

xyz/abc/test.html в xyz/abc/test

xyz/abc/qwerty/test2.html в xyz/abc/qwerty/test2

В настоящее время у меня есть это правило перенаправления в моей конфигурации ngnix, и оно работает для перенаправления каталога первого уровня:

расположение ~ ^/(xyz|abc).html { return 301 /$1; }

Это работает для первого уровня прямого доступа, но не работает для подкаталогов. Как этого добиться? Спасибо за помощь.

Рейтинг:1
флаг sv

Есть несколько способов решить эту проблему. Вот один из таких способов...

Первым шагом является захват части URI, которую необходимо переписать. Затем мы можем выполнить перенаправление, используя либо место расположения блокировать или использовать переписать условие.

С использованием место расположения блокировать с именованный захват...

расположение ~ ^/(?<переменная>[/a-zA-Z0-9]+)\.html$ { return 301 /$variable; }

Или же

расположение ~ ^/([/a-zA-Z0-9]+)\.html$ { return 301 /$1; }

С использованием переписать...

переписать ^/(?'custom_url'[/a-zA-Z0-9]+)\.html$ /$custom_url навсегда;

Nginx поддерживает именованные захваты используя следующий синтаксис:

?<имя> Синтаксис, совместимый с Perl 5.10, поддерживается, начиная с версии PCRE-7.0.
?'name' Синтаксис, совместимый с Perl 5.10, поддерживается начиная с PCRE-7.0.
?P<name> Синтаксис, совместимый с Python, поддерживается начиная с PCRE-4.0.

Ссылка: https://nginx.org/en/docs/http/server_names.html (под заголовком Имена регулярных выражений).

флаг ma
Спасибо за ответ Поти. Я попробовал указанное вами правило определения местоположения. Он работает для подкаталога 2-го уровня (от xyz/abc/test.html до xyz/abc/test), но не для (yz/abc/qwerty/test2.html до xyz/abc/qwerty/test2).
флаг sv
Если вы использовали правило `location`, убедитесь, что у вас есть правило `location` по умолчанию, например `location / {}`. Вот пример репозитория для тестирования вышеуказанного сценария с доступным тестовым URL-адресом (пока временно)... https://github.com/pothi/qa-nginx/tree/main/serverfault/1070388
флаг ma
Спасибо друг! Это было полезно. Это сработало.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.