Regex для сопоставления шаблона URL для файла htaccess - PullRequest
1 голос
/ 18 июля 2009

Я действительно борюсь с этим регулярным выражением.

Мы запускаем новую версию функции «групп», но нам нужно поддерживать все старые группы по одному и тому же URL. К счастью, эти две функции имеют разные шаблоны URL, так что это должно быть легко? Правильно?

  • Старый: domain.com/group/$groupname
  • Новое: domain.com/group/$groupid/$groupname

Текущее регулярное выражение, которое я использовал в регулярном выражении для перенаправления старых групп на старый сценарий, было: RewriteRule ^ (group / ([^ 0-9 /].*))$ /old_group.php/$1 [ L, QSA]

Это работало замечательно, пока не появилась группа, которая называлась примерно так: domain.com / group / 2009-neato-group

В этот момент регулярное выражение сопоставило новую группу со старым кодом, поскольку оно содержало числа. По электронной почте Ой.

Итак, есть ли какие-нибудь мысли о регулярном выражении, которые бы соответствовали старому шаблону, чтобы я мог перенаправить его?

Шаблоны, которым он должен соответствовать :

  • группа / моя старая-группа
  • группа / другая старая-группа /

Шаблоны, которым он не может соответствовать :

  • группа / 12 / а-новой группы
  • группа / 345 / другая новой группа /
  • группа / 6789 / а-третья-группа / модуль-а /

Лучший способ, о котором я думал, это то, что он не может начинаться с "group-slash-numbers-slash", но не смог превратить это в регулярное выражение. Так что что-то, что могло бы отрицать этот паттерн, вероятно, сработало бы.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 июля 2009

Подумайте наоборот: если URL совпадает с ^ group / [0-9] + /. +, Тогда это новая группа, поэтому перенаправьте их сначала (с правилом [L]). Все остальное должно быть старой группой, вы можете сохранить там свои старые правила.

0 голосов
/ 18 июля 2009

Ваш выбор дизайна затрудняет решение с использованием чистого htaccess, тем более что group/123-another-old-group-456/a-module-inside-the-group/ является действительным URL старого стиля.

Я бы предложил сценарий перенаправителя, который просматривает свои аргументы, определяет, является ли первая часть допустимой groupid, и если да, то это URL нового стиля, который приводит пользователя в эту группу. Иначе, это URL старого стиля, поэтому передайте его old_group.php. Как то так:

RewriteRule ^group/(.*)$ /redirector.php/$1 [L,QSA]
...