регулярные выражения. правило для mod_rewrite

alpha

Новичок
регулярные выражения. правило для mod_rewrite

Рагьше никогда не использовал с ругулярные варажениямия. Так что не ругаться за вопросы.

Собсна проблема.
На сайте есть секции и подсекции. Раньше навигация осуществлялась так:
по секциям: section.php?id=xxx
по подсекциям: subsection.php?id=xxx
Теперь надо сделать так
по секциям: /имя_секции или /имя_секции/
по подсекциям: /имя_секции/имя_подсекции или /имя_секции/имя_подсекции/
В базе завел соотв обозначения на секции и подсекции.
Прочитал что такое можно организовать с помощь mod_rewrite.
Но в силу своей слабости в регах не могу придумать правильные RewriteRule.
приведите плз пример.

Второй вопрос.
Также у меня на сайте все картинки с относительными путями. Т.е. для них тоже надо прописывать что-то типа RewriteRule ^(.*)images/(.*)$ imasges/$2 [L]
Также есть статьи и новости.
Итого, в .htaccess у меня получаеться куча этих RewriteRule. В которых я постоянно путаюсь. Может я неправильно понял принцип использования mod_rewrite? Ведь гораздо удобнее все перенаправлять в, допустим redirect.php, и оттуда уже по результату разбора урл перенаправлять на другую страницу.
 

que_bunt

Новичок
по второму вопросу - а что мешает делать картинки с абсолютными путями?
 

alpha

Новичок
ну это не принципиально :( мне очень нужно по первому.
Я никак не могу придумать. Уже второй день.
 

que_bunt

Новичок
alpha

как ты хочеш урл типа "www.site.com/section_name/" преобразовать в урл типа "www.site.com/index.php?id=section_id" ???

в mod_rewrite реальный урл формируется путем преобразования (переставляния,выдергивания частей) из абстрактного.
 

AmadMike

Новичок
А вот эти xxx будут соответствовать /section/subsection?
Если скажем /news/new1 будет соответствовать subsection.php?id=new1 , а /news - section.php?id=news то можно попробовать так (правда не уверен в том что результат будет верным, эксперементировать неохота)

RewriteEngine on

^/(.*)/(.*)$ /subsection.php?id=$2
^/(.*)$ /section.php?id=$1

хотя вместо (.*) лучше прописать более близкое к оригиналу, например ([0-9]*), если id состоит из цифр.
 

alpha

Новичок
Ага, если б оно работало. Это был самый первый вариант.
Но во первых там надо ^/(.*)/(.*)$ /subsection.php?id=$2 [L]
а то оно обрабатывает первым правилом, приводит его к виду второго и обрабатывает вторым :( Знатоки регулярных выражений - для вас это 15 мин!!!
 

que_bunt

Новичок
alpha попробуй убрать самый первый слеш:
Код:
^(.*)/(.*)$ /subsection.php?id=$2 [L]
 

alpha

Новичок
В данный момент .htaccess приобрел такой вид:

RewriteEngine on
Options +FollowSymlinks
RewriteBase /

RewriteRule ^(.*)i/(.*)$ i/$2 [L]
RewriteRule ^(.*)css/(.*)$ css/$2 [L]

RewriteRule ^index.php\?(.*)$ index.php [L]

RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+/*)$ subsection.php?section=$1&subsection=$2 [L]
RewriteRule ^([a-zA-Z]+/*)$ section.php?section=$1 [L]

Теперь возникла следущая проблема
при вводе адреса типа host/section/subsection все последущие ссылки отображаються в виде host/section/section или host/section/section/subsection. И далее если кликать на них то получаем host/section/section/section/section.... Как с этим бороться?
Все пути у меня относительные. Помогает выставление / если файл лежит в корне, а если нет???
Просто я еще не очень знаю (и понимаю) механизм работы mod_rewrite.
 

kruglov

Новичок
А что мешает все кидать на один обработчик, а тот уж пускай сам explodит request_uri и ищет в базе что нужно?
 

alpha

Новичок
Вобщем всем спасибо, на локальной машине все работает. При переносе на сервер - нет. Как можно узнать, подключен ли там mod_rewrite? И если нет, как его можно подключить?
 
Сверху