В большинстве случаев работа с 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 неверный
Спасибо! Очень пригодилось. в фароритс блог :)
Link | Декабрь 4th, 2008 at 22:14
Спасибо. Как раз то что искал. Теперь буду разбираться. Никогда не делал 404 раньше. Искал инфу по реврайту на реальном примере и заметил что 404 делаеться вообще элементарно. :) Век живи – век учись.
Link | Январь 7th, 2009 at 18:36
А как делать преобразования УРЛов, если пользователь переходит на сайт по старым (динамическим) УРЛам?
Link | Март 2nd, 2009 at 18:17
я чет непому автор опечатался или это дейсвительно переделает статические адреса в динамические ???
помойму все стремятся ук тому чтоб пределать динамику в статику
Link | Март 15th, 2009 at 08:22
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
Link | Сентябрь 7th, 2010 at 17:58