Главная > Заметки, Сделай сам, Статьи > Красивые и понятные пути для страниц вашего сайта

Красивые и понятные пути для страниц вашего сайта

В этой статье речь пойдет о модуле Апача (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');

Дерзайте :)

Заметки, Сделай сам, Статьи , , , ,

  1. 19 Фев 2009 из 13:59 | #1

    Достаточно остроумно читмть ваш блог!

  2. 19 Фев 2009 из 15:25 | #2

    @Layka: В смысле?

  3. 19 Фев 2009 из 19:56 | #3

    ействительо пост замечарельный, спасибо автору!

  4. 20 Фев 2009 из 14:06 | #4

    Ксатти не подскажет, на каком сайте можно начать собственный блог?

  5. 20 Фев 2009 из 16:21 | #5

    Кажется все правильнно, но интересно было быу выяснить, будет ли продолжение информации?

  6. 20 Фев 2009 из 21:42 | #6

    А все же интерсено, где еде можно отыскать данные по этомму топику?

  7. 21 Фев 2009 из 0:17 | #7

    @Lariska: 66.ru — социальный проект, очень отличный

  8. 21 Фев 2009 из 0:18 | #8

    @Fotka: что именно интересует?

  9. 21 Фев 2009 из 14:59 | #9

    Поитал ваш дневник и срезу тоже появилось желание начать свой древинк! ;)

  10. 21 Фев 2009 из 17:21 | #10

    Очень интересно, поседуют ли сзожпе расссказы?

  11. 21 Фев 2009 из 21:17 | #11

    В ближайшее время напишу продолжение к текущей статье, как правильно оформлять работу модулей таких как Новости, Каталог, Обратная связь и других по аналогии. Т.е. тема будет — Обработка параметров для основных модулей Вашего сайта.

  12. 21 Фев 2009 из 23:34 | #12

    Благодарю, пост пришелся как раз вовремя! =))

  13. 22 Фев 2009 из 17:07 | #13

    аНксолко же умеет писать автор, ну просто приятно приобретать информацию в данном виде!

  14. 22 Фев 2009 из 20:18 | #14

    На самом деле, понятно все написано

  15. 24 Фев 2009 из 2:03 | #15

    Как обычно, изучю ваш журрнал и удивляюсь, насколько умеет же излагать мыслим человек!

  16. 24 Фев 2009 из 16:23 | #16

    Не очень на самом деле все ясно, но я призадумалась...

  17. 24 Фев 2009 из 20:22 | #17

    На сеомм деле я уже читал не поммнд где про данную тему, но автор рачсказал все весьма отлично!

  18. 24 Фев 2009 из 23:52 | #18

    Где еще, кроме Ггула имеется возможносмть узнать про это?

  19. 26 Фев 2009 из 13:21 | #19

    Очень интерсено видеть ваши записи...

  20. 17 Март 2009 из 22:10 | #20

    Хорошая статья, узнал много нового!)

  21. 18 Март 2009 из 21:49 | #21

    Все-таки на самом деле нравится мне Ваш блог. Всегда очень интересно читать, включая эту тему

  22. 19 Март 2009 из 19:30 | #22

    Подписался на rss

  23. 21 Март 2009 из 6:03 | #23

    Просто класс!!!

  24. 21 Март 2009 из 19:32 | #24

    Спасибо автору за столь отличный пост. Надеюсь будут продолжения.

  25. 24 Март 2009 из 17:26 | #25

    Как говорится... Не дать не взять, зачётная статья!

  26. 31 Март 2009 из 16:21 | #26

    Добрый день,ТС!!!

    У вас на посте буквы как крякозябры какието- отремонтируйте, ато хочется узнать инфу

  27. 06 Апр 2009 из 8:57 | #28

    Подписался на rss

  28. 06 Апр 2009 из 12:19 | #29

    Даже и не придирешься!

  29. 06 Апр 2009 из 16:55 | #30

    Супер статья! Подписался на RSS, буду следить =)

  30. 06 Апр 2009 из 19:48 | #31

    Без особого преувеличения можно точно сказать, что пост тему раскрыл на все 100 процентов.

  31. 08 Апр 2009 из 20:02 | #32

    Можно ли взять одну картинку с Вашего блога? Очень понравилась. Линк на Вас есстественно поставлю.

  32. 09 Апр 2009 из 8:01 | #33

    @kononin

    можно :)

  33. 12 Апр 2009 из 5:35 | #34

    Супер! На самом деле прикольно написано. :)

  34. 12 Апр 2009 из 13:14 | #35

    Рекомендую автору поставить плюгин «Akismet», иначе у тебя левых комментариев собралось очень большое количество.

    Еще советую «AntiSpam Bee», так-же прекрасная вещь.

    Успехов в блоггерстве!

    С Уважением, Сурен Алимгулов

    Мой сайт

    http://forextraderblog.ru/

  35. gnostic
    19 Июнь 2009 из 12:57 | #36

    Вобщем то все неплохо, только вот стоит ли в .htaccess делать пересылку всех без исключения запросов? Может быть только тех которые имеют имена разделов?

  36. 05 Июль 2009 из 0:10 | #37

    Статья из серии «на пути к web-фреймворку» =)

    В целом — неплохо, и полезно начинающим.

    Единственное — действительно, в .htaccess не нужно совсем уж зверствовать, обычно ставят условие «если именно такого файла нет, то парсить и редиректить»:

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteRule ^/?([^?]+)?$ /index.php?pageURI=$1 [NC,QSA,L]

  1. Трекбеков пока нет.