Я пытаюсь перенаправить весь трафик с wwww.mydomain.com/site/
на wwww.mydomain.com
, кроме URL-адресов, которые содержат /events/
в конце. Сейчас я использую следующее регулярное выражение, которое подходит для большинства случаев:
Источник: ^/cra/(?!events)(.*)
Цель: /$1
Он будет перенаправлять весь трафик, кроме тех, которые содержат events
в виде строки в URL-адресе, но проблема с этим регулярным выражением в том, что он не перенаправляет wwww.mydomain.com/site/events/myevent
на wwww.mydomain.com/events/myevent
Я не смог найти что-то, что касалось бы упомянутого варианта использования, было бы здорово, если бы кто-нибудь мог мне помочь.
Если я правильно понимаю вашу проблему, вы хотите перенаправить все с
/site/*
к
/
НО: если он содержит
/events/
в самом конце: вообще не перенаправлять
Если это то, что вы пытаетесь сделать, это должно сработать.
^(?!.*(events/\Z))(/site/)(.*)
Доступ к части сохранить после перенаправления с $3.
Совет: регулярное выражение101 — отличный сайт для изучения регулярных выражений и экспериментов с ними.
Обратите внимание, что это работает только в том случае, если часть «event/» имеет завершающий «/». Но вы можете работать оттуда, я полагаю.
Редактировать: С поправкой на комментарий Зохаиба
Для этого сделайте последнюю часть после «/site/» группой. и выберите эту группу (должно быть 3 доллара). Также группу можно просто преобразовать в "(.*), в результате чего получится следующее регулярное выражение: ^(?!.*(events/\Z))(/site/)(.*)
Это действительно помогает, но здесь отсутствует одна вещь, я также хочу сохранить оставшийся URL-адрес, если он отличается от /events/ i-e Источник: wwww.mydomain.com/site/some-slug Цель: wwww.mydomain.com/some-slug