Проблема с RewriteRule в htaccess?

Друзья, подскажите пожалуйста как правильно составить RewriteRule чтобы все работало правильно.
Есть правило:
RewriteRule ^katalog/([a-z0-9-]+)(/([a-z0-9-]+))?(/page-(\d+))?/$ /category.php?cat1=$1&cat2=$3&page=$5 [L,QSA]


Как для второй(cat2=$3) регулярки написать исключение в виде page-(\d+)? Просто если урл такой: site.ru/katalog/aminokisloty/aakg/page-2/ то все работает. А если подкатегории нет: site.ru/katalog/aminokisloty/page-2/ то разумеется нет, т.к. он page передает в (cat2=$3).

Могу конечно просто у страниц убрать / и тогда это решит вопрос, но как то не хочется, можно ведь 100%?
Заранее ОГРОМНОЕ спасибо!

P.S. в подкатегории могут быть цифры, т.е. просто вот так нельзя - ^katalog/([a-z0-9-]+)(/([a-z-]+))?(/page-(\d+))?/$
  • Вопрос задан
  • 32 просмотра
Решения вопроса 1
@dodo512
По умолчанию квантификаторы ? * + жадные.
Добавлением ? их можно переключить в ленивый режим ?? *? +?
RewriteRule ^katalog/([a-z0-9-]+)(/([a-z0-9-]+))??(/page-(\d+))?/$ /category.php?cat1=$1&cat2=$3&page=$5 [L,QSA]


В выражении ( а | b ) альтернативы проверяются слева направо.
Так что (/([a-z0-9-]+))?? можно заменить (|/([a-z0-9-]+))
RewriteRule ^katalog/([a-z0-9-]+)(|/([a-z0-9-]+))(/page-(\d+))?/$ /category.php?cat1=$1&cat2=$3&page=$5 [L,QSA]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы