Красивые и понятные пути для страниц вашего сайта
В этой статье речь пойдет о модуле Апача (apache.org) — mod_rewrite
В кратце, этот модуль позволяет на уровне сервера апача обрабатывать входящие урлы. По началу многие начинающие программисты если пишут сайт, то переход по разделом осуществляется следующим образом:
Разделы сайта в виде урлов:
http://site.ru/index.php — главная страница
http://site.ru/feedback.php — обратная связь
http://site.ru/catalog.php — каталог
http://site.ru/price.php — страница с прайсами
а если еще и передавать скрипту параметры, то получается «ужасное» (для кого как):
http://site.ru/catalog.php?cat_id=40&item_id=1234&action=addrec — добавить в корзину товар
http://site.ru/price.php?page=4&order=price — показывает 4ю страницу прайса с сортировкой по цене
выглядит, ну уж очень не красиво
При использовании модуля mod_rewrite можно добиться следующих результатов:
http://site.ru/ — главная страница
http://site.ru/feedback/ — обратная связь
http://site.ru/catalog/ — каталог
http://site.ru/price/ — страница с прайсами
А передача параметров будет выглядеть так:
http://site.ru/catalog/40/1234/addrec/ — добавить в корзину товар
http://site.ru/price/4/price/ — показывает 4ю страницу прайса с сортировкой
А если сделать более красиво и с оптимизацией для SEO получится так:
http://site.ru/catalog/televizors/1234/addrec/ — добавить в корзину товар
тут 40й ID (например, телевизоров) заменен названием в латинской транскрипции.
Это реализуется связкой номера с названием (подробнее я думаю сами можете сообразить)
Реализация:
1. В начале, ваш сервер (хостинг) должен поддерживать работу файла .htaccess и модуля mod_rewrite
2. В файле .htaccess пишем следующее:
RewriteEngine On
RewriteRule ^(^[^.]+)$ /index.php
Первая строка — включает работу модуля mod_rewrite, вторая — перенаправляет на файл index.php все запросы в адресной строке к данному сайту.
3. В файле index.php пишем следующий код:
$user_query = isset($_SERVER['REQUEST_URI']) ? trim($_SERVER['REQUEST_URI'], '/'): ''; $elements = explode('/',$user_query);
В массиве $elements мы получим все составляющие переданного пути, т.е. параметров, а дальше, начинаем их обработку:
Имеем следующий адрес: http://site.ru/catalog/40/1234/addrec/
Скрипт его разбивает на части:
catalog // $elements[0] 40 // $elements[1] 1234 // $elements[2] addrec // $elements[3]
если известно что 0й параметр — это раздел сайта, то получаем следующий код обработки параметров:
switch ($elements[0]) { Case ‘catalog’: { Echo ‘Тут обрабатываем следующие параметры массива’; } Break; Case ‘price’: { } Case ‘feedback’: { } Break; Case ‘404’: { } Break; Default: { Header(“Location: /404/”); } Break; }
Ну вот, я думаю тут все понятно. Это не идеальный код, его можно оптимизировать и додумывать. Например, в БД у вас хранится таблица с разделами сайта, у этой таблицы есть поле «Путь» в который вы храните все пути до страницы, можно сделать проверку пути с таблицей, если такой путь присутствует в ней, то говорим что эта страница, а вот все оставшиеся параметры пути — буду как параметры, и их можно складывать в массив типа $params, т.е. имея:
Путь: http://site.ru/catalog/40/1234/addrec/
В БД: /catalog/ — это путь до страницы Каталог
Делая проверку получаем, что из переданного пути, все что после /catalog/ — параметры:
$params=array('40','1234','addrec');
Дерзайте
Достаточно остроумно читмть ваш блог!
@Layka: В смысле?
ействительо пост замечарельный, спасибо автору!
Ксатти не подскажет, на каком сайте можно начать собственный блог?
Кажется все правильнно, но интересно было быу выяснить, будет ли продолжение информации?
А все же интерсено, где еде можно отыскать данные по этомму топику?
@Lariska: 66.ru — социальный проект, очень отличный
@Fotka: что именно интересует?
Поитал ваш дневник и срезу тоже появилось желание начать свой древинк!
Очень интересно, поседуют ли сзожпе расссказы?
В ближайшее время напишу продолжение к текущей статье, как правильно оформлять работу модулей таких как Новости, Каталог, Обратная связь и других по аналогии. Т.е. тема будет — Обработка параметров для основных модулей Вашего сайта.
Благодарю, пост пришелся как раз вовремя! =))
аНксолко же умеет писать автор, ну просто приятно приобретать информацию в данном виде!
На самом деле, понятно все написано
Как обычно, изучю ваш журрнал и удивляюсь, насколько умеет же излагать мыслим человек!
Не очень на самом деле все ясно, но я призадумалась...
На сеомм деле я уже читал не поммнд где про данную тему, но автор рачсказал все весьма отлично!
Где еще, кроме Ггула имеется возможносмть узнать про это?
Очень интерсено видеть ваши записи...
Хорошая статья, узнал много нового!)
Все-таки на самом деле нравится мне Ваш блог. Всегда очень интересно читать, включая эту тему
Подписался на rss
Просто класс!!!
Спасибо автору за столь отличный пост. Надеюсь будут продолжения.
Как говорится... Не дать не взять, зачётная статья!
Добрый день,ТС!!!
У вас на посте буквы как крякозябры какието- отремонтируйте, ато хочется узнать инфу
calvert\\hoggatt
странно, все читают нормально, пришли скриншот
Подписался на rss
Даже и не придирешься!
Супер статья! Подписался на RSS, буду следить =)
Без особого преувеличения можно точно сказать, что пост тему раскрыл на все 100 процентов.
Можно ли взять одну картинку с Вашего блога? Очень понравилась. Линк на Вас есстественно поставлю.
@kononin
можно
Супер! На самом деле прикольно написано.
Рекомендую автору поставить плюгин «Akismet», иначе у тебя левых комментариев собралось очень большое количество.
Еще советую «AntiSpam Bee», так-же прекрасная вещь.
Успехов в блоггерстве!
С Уважением, Сурен Алимгулов
Мой сайт
http://forextraderblog.ru/
Вобщем то все неплохо, только вот стоит ли в .htaccess делать пересылку всех без исключения запросов? Может быть только тех которые имеют имена разделов?
Статья из серии «на пути к web-фреймворку» =)
В целом — неплохо, и полезно начинающим.
Единственное — действительно, в .htaccess не нужно совсем уж зверствовать, обычно ставят условие «если именно такого файла нет, то парсить и редиректить»:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?([^?]+)?$ /index.php?pageURI=$1 [NC,QSA,L]