Перенаправление всех URL-адресов, которые содержат 1 конкретное слово, но не содержат других слов

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

Поэтому мне нужно сделать 301 редирект для всех URL-адресов, которые содержат 1 слово в отдельности, но не содержат других слов:

Пример:

  1. Старый сайт: www2.misite.com
  2. Новый сайт: www.misite.com

Мне нужно перенаправить все URL-адреса, содержащие слово «www2.misite.com/travel(.*)», но не содержащие слов «бронирование» и «отель».

Мой сервер это Nginx, я не знаю, выполняется ли это с помощью регулярного выражения или с помощью операторов nginx.

Большое спасибо.

2
задан 11 March 2017 в 01:42
3 ответа

Я смог решить свою проблему следующим образом:

    location ~ /travel(.*)+/(.*)$ {
    if ($uri !~ "^(.*)/(reservation|hotel|faq)(.*)"){
        return 301 https://www.misite.com$request_uri;
    }
    autoindex on;
    root /usr/share/nginx/html/sites/;
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
}

Спасибо.

6
ответ дан 3 December 2019 в 09:15

Попробуйте регулярное выражение с негативным взглядом вперед для двух слов, которые вы не хотите пересылать. Вы можете сделать это в условии if или в правиле перезаписи.

.
0
ответ дан 3 December 2019 в 09:15

Я пытаюсь

location ~ /travel(.*)+/(.*)$ {
    if ($request_uri !~ "^/(reservation|hotel|faq)/\w+$"){
        return 301 https://www.misite.com/$1;
    }
}

, но не работаю на внутреннее условие. :(

)
0
ответ дан 3 December 2019 в 09:15

Теги

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