#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. Большое спасибо. Вы правы насчет проверки на наличие косой черты, и это решение, я думаю, будет работать идеально.