Соответствие перенаправления Htaccess из списка?

#regex #.htaccess #redirect

Вопрос:

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

Например, на сайте, над которым я работаю, есть несколько брендов:

 https://example.com/anything/brand/nike/something
https://example.com/anything/brand/puma/something
 

Мое текущее перенаправление будет

 RedirectMatch 301 "(.*)/brand/nike(.*)$" "$1/manufacturer--nike" 
 

Чтобы получить следующий вывод, удалите /brand/ и nike замените manufacturer--nike и, наконец, удалите все, что следует за этим, т. Е. /something .

 https://example.com/anything/manufacturer--nike
 

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

Есть ли способ?

Комментарии:

1. Список правил, реализующих конкретные токены для сопоставления URL-адреса, представляет собой список. Нет смысла заменять один список другим …

Ответ №1:

Если количество брендов ограничено, вы можете использовать чередование (например nike|puma|brand , и т.д.) В регулярном выражении, чтобы соответствовать nike или puma или. brand

В стороне: Чтобы соответствовать nike/<something> , вы должны, по крайней мере, проверить наличие этой косой черты, иначе она будет совпадать nikeeeee и nikey т. Д. (Хотя это не обязательно проблема.)

Например:

 RedirectMatch 301 "(.*)/brand/(nike|puma|brand)/" "$1/manufacturer--$2" 
 

(.*)$ В конце регулярного выражения — чтобы просто удалить конечную часть URL-пути — не требуется.

$2 Обратная ссылка содержит «фирменное наименование», соответствующее второму подшаблону захвата (чередования).

способ перезаписи URL-адресов

Просто чтобы уточнить, это внешнее перенаправление, а не «переписывание URL-адресов».

Комментарии:

1. Большое спасибо. Вы правы насчет проверки на наличие косой черты, и это решение, я думаю, будет работать идеально.