Удаление нескольких каталогов из URL-адреса через Nginx

Я пытаюсь отфильтровать несколько каталогов из URL с помощью Nginx, но безуспешно. Все инструкции, которые я видел в Интернете, актуальны только тогда, когда нужно удалить только один каталог, но никто не показывает инструкции для нескольких.

Это URL:

https://www.domain.com/pages/l/something.html

Я хочу:

https://www.domain.com/something.html

Обратите внимание на удаленный / pages / l / сегмент.

Кроме того, мне нужно переписать URL-адрес и перенаправить 301 (постоянный), чтобы никакое SEO не пострадало.

Как мне этого добиться?

0
задан 2 August 2016 в 14:28
1 ответ

Это правило перезаписи, заставляющее nginx отправлять 301 перенаправление в браузер, когда пользователь обращается к любому файлу / пути в / pages / l / ]:

location /pages/l/ {
    rewrite ^/pages/l(/.*)$ $1 permanent;
}

Здесь мы фиксируем путь после / pages / l с помощью регулярного выражения, а затем используем его в качестве аргумента назначения перенаправления.

Если вы хотите сопоставить, например, любой однобуквенный каталог под / pages / и любой файл под ним, вы можете использовать это:

location /pages/.?/ {
    rewrite ^/pages/.?(/.*)$ $2 permanent;
}

Если файлы являются статическими HTML-файлами, которые нельзя переместить из их текущих каталогов в места, соответствующие новым URL-адресам, вы можете настроить ваша директива try_files выглядит так:

location / {
    try_files $uri $uri/ /pages/l$uri /index.php$args;
}

Здесь мы говорим nginx искать фактические файлы по пути, указанному в URI, или, если не найдены, то с помощью / pages / l .

Тем не менее, я действительно рекомендую вам физически переместить файлы, так как это изменение усложняет систему и затрудняет ее обслуживание. В конце концов, запросы к файлам 301 перенаправляются в новое место, поэтому пользователи не видят разницы.

0
ответ дан 24 November 2019 в 06:03

Теги

Похожие вопросы