Регулярное выражение для соответствия шаблону URL для файла htaccess

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

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

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

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

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

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

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

Шаблоны должны совпадать:

  • группа / моя старая группа
  • группа / другая-старая-группа /
  • группа / 123-другая-старая-группа-456 / модуль-внутри-группы /

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

  • группа / 12 / а-новая-группа
  • группа / 345 / другая-новая-группа /
  • группа / 6789 / a-3-я группа / модуль-abc /

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

Спасибо


person Derek Gathright    schedule 17.07.2009    source источник


Ответы (2)


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

person Jochen Ritzel    schedule 18.07.2009
comment
Это один из методов, о котором я размышлял, но обратный способ казался более чистым по сравнению с другими правилами, которые у меня есть в коде. Но, возможно, в конце концов мне придется уступить. Спасибо. - person Derek Gathright; 18.07.2009
comment
Если вы хотите отменить шаблон, просто добавьте его в начало! вот так:! ^ group / [0-9] + /. + - person Inshallah; 18.07.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]
person sigint    schedule 18.07.2009