Не один год работаю с регулярными выражениями, но с mod_rewrite сталкивался поскольку постольку. Задача: в 2 и более RewriteRule (которые будут выполняться подряд) сделать замены в запрошенном URL. Пример: пользователь запрашивает URL со строкой запроса "menu/category/category_id/26/" Требуется: 1) через первый RewriteRule сделать замену "menu/category" на "?menu=category" так, что "/menu/category/category_id/26/" --> "?menu=category/category_id/26/", 2) через второй RewriteRule (следующий и выполняющийся сразу за ним) сделать замену "/category_id/26/" на "&category_id=26" так, что "?menu=category&category_id=26". Первая замена происходит успешно, а вот для второй замены не могу составить правильное выражение. Помогите пожалуйста. З.Ы. В одну строку разобрать нельзя, т.к. пример я привел условный, в реальной работе таких пар "название"/"значение" будет много и их количество заранее неизвестно, так что 1 разбором обойтись нельзя.
Сам же и нашел решение (на случай, если кому-то пригодится): RewriteRule ^menu/([^/]*)(.*)$ ?menu=$1$2 RewriteCond %{QUERY_STRING} ^([^/]*)/category_id/(\d*)$ RewriteRule ^$ index.php?%1&category_id=%2
Лично мне удобно было бы перенаправлять все не существующие запросы (обращение к не существующим папкам и файлам) в скрипт, а потом в нем уже анализировать REQUEST_URI и "выносить приговор". По мне удобно, я так и сделал.
STRELOK А что можешь сказать по поводу производительности такого решения, если критична скорость выполнения? Мне кажется твое решение будет заметно медленнее.
Xavier Teodonius Если ты никогда не делал профайлинг, то о производительности беспокоиться нет смысла.
О производительности пока не задумывался, но пока все работает нормально, но в плане простоты скажем создания новых модулей - это более удобно.