Я пытаюсь отфильтровать несколько каталогов из URL с помощью Nginx, но безуспешно. Все инструкции, которые я видел в Интернете, актуальны только тогда, когда нужно удалить только один каталог, но никто не показывает инструкции для нескольких.
Это URL:
https://www.domain.com/pages/l/something.html
Я хочу:
https://www.domain.com/something.html
Обратите внимание на удаленный / pages / l / сегмент.
Кроме того, мне нужно переписать URL-адрес и перенаправить 301 (постоянный), чтобы никакое SEO не пострадало.
Как мне этого добиться?
Это правило перезаписи, заставляющее 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
перенаправляются в новое место, поэтому пользователи не видят разницы.