Ноя
14
2008

Пример работы с mod_rewrite

В большинстве случаев работа с mod_rewrite сводится к тому, чтобы сделать friendly URLs(дружественные адреса ссылок). Т.е. мы хотим видеть не www.example.com/index.php?page=catalog&razdel=shoes&producer=adidas, а хотим чтобы было www.example.com/catalog/shoes/adidas.html

Теории по mod_rewrite в интернете много, поэтому я приведу небольшой пример, который при необходимости вы можете видоизменить как вам угодно.
Я подразумеваю, что вы знаете, что такое .htaccess. Если не знаете, то welcome to google =)

Ставим цель для нашего примера:

мы хотим чтобы у нас были ссылки такого плана:
www.example.com/catalog/ – показываем разделы каталога
www.example.com/catalog/shoes/ – показываем производителей продукции выбранного раздела (в нашем примере – производителей обуви)
www.example.com/catalog/shoes/adidas.html – показываем продукты производителя (в нашем случае – adidas)

Обрабатывает у нас всё это дело например index.php. Т.е. нам надо передавать серверу соответственно что-то типа такого:
www.example.com/index.php?page=catalog
www.example.com/index.php?page=catalog&razdel=shoes
www.example.com/index.php?page=catalog&razdel=shoes&producer=adidas
Делаем! =)

В .htaccess пишем следующее (пояснения ниже):

RewriteEngine on
RewriteBase /
# html #
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/(.*).html?$ index.php?page=$1&razdel=$2&producer=$3 [NC,L] # page, razdel, producer.html
# folders #
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?page=$1&razdel=$2 [NC,L] # page, razdel
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page=$1 [NC,L] # page
RewriteRule ^/?$ index.php [NC,L] # index
# error #
ErrorDocument 404 /404.php

А теперь разберемся подробнее что в каждой строке мы делаем.

RewriteEngine on – включаем mow_rewrite

RewriteBase / – базовый url для преобразований. не знаю как понятнее объяснить. лучше посмотреть вот тут пример. сразу станет понятнее.

RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?page=$1&razdel=$2 [NC,L] и аналогичное – это собственно наши правила для ссылок вида www.example.com/catalog/shoes/, т.е. ссылки-каталоги.

RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/(.*).html?$ index.php?page=$1&razdel=$2&producer=$3 [NC,L] – а это уже «закос под файл html».

[NC,L] – флаги. NC означает, что регистр не имеет значения. Т.е. www.example.com/catalog/ и www.example.com/cAtALoG/ будут вести к одному и тому же, а именно, в соответствии с нашим правилом, к www.example.com/index.php?page=catalog. L означает, что если это правило подходит под наш URL, то следующие правила не применять, т.е. остановиться. Именно поэтому в этом примере я разместил правила по принципу «от большего количества параметров к меньшему». Т.е. если приходит на сервер запрос www.example.com/catalog/shoes/adidas.html, то выполнение правил в htaccess останавливается на правиле RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/(.*).html?$ index.php?page=$1&razdel=$2&producer=$3 [NC,L]. А если запрос не удовлетворил этому правилу, то проверяется следующее правило и так далее до конца.

Ну и последнее: ErrorDocument 404 /404.php – указываем куда отправлять пользователя в случае если url неверный

tags: ,
posted in Internet, web by yas

Follow comments via the RSS Feed | Оставить комментарий | Trackback URL

5 Comments to "Пример работы с mod_rewrite"

  1. Anonymous wrote:

    Спасибо! Очень пригодилось. в фароритс блог :)

  2. Zefo wrote:

    Спасибо. Как раз то что искал. Теперь буду разбираться. Никогда не делал 404 раньше. Искал инфу по реврайту на реальном примере и заметил что 404 делаеться вообще элементарно. :) Век живи – век учись.

  3. самогипноз wrote:

    А как делать преобразования УРЛов, если пользователь переходит на сайт по старым (динамическим) УРЛам?

  4. Angrey wrote:

    я чет непому автор опечатался или это дейсвительно переделает статические адреса в динамические ???
    помойму все стремятся ук тому чтоб пределать динамику в статику

  5. dendTwehili wrote:

    parent organism. We were mutagens, Fox and I, dubious agents adrift on thedark side of the intercorporate sea.When we had you in place in Vienna, we offered them Hiroshi. Theydidn’t even blink. Dead calm in an LA hotel room. They said they had tothink about it.
    Ipaq 316 travel companion
    Www a mega travel ru

    Ics travel туроператор
    Columbia travel

Leave Your Comment