Правильная ЧПУ-адресация (навигация) сайта

12
Скромный малый
На сайте с 07.03.2008
Offline
99
1406

Привет! :)

Есть собственная разработка движка. Недавно пришел к выводу, что удобно хранить всю древовидную структуру сайта в БД, для универсального построения заголовка title, трек-бара (пути типа "Главная -> Каталог -> Продукция тип 1 -> Продукт 1..."), меню и прочих полезностей, связанных с ЧПУ-адресацией сайта типа http://site.ru/catalog/products1/pr1/. Так сделано в серьёзных движках.

Вопрос в-следующем: как грамотно организовать эту самую адресацию ЧПУ (http://site.ru/catalog/products1/pr1/)? На первый взгляд, все просто: новый уровень = новый параметр через слэш, но: представим ситуацию, когда на странице есть 2 разбиения на подстраницы [фотогалерея Стр. 1 2 3 4 ..], [новость Стр 1 2 3 ..]. Как тогда передать в URL адресацию подстраниц для данного раздела? Как разделить 2 этих постраничных разбиения?... Просьба AJAX не предлагать.. не добрался до него еще..

Лучший разгруппировщик запросов в рунете (http://semparser.ru/p/2959)
Николай В.
На сайте с 07.09.2006
Offline
62
#1

Привет.

Я делаю так:

http://www.sitename.ru/catalogue/categoryname/page2/ — это вторая страница

http://www.sitename.ru/catalogue/categoryname/2/ — это товар с кодом(id) равным 2.

С http://www.sitename.ru/catalogue/categoryname/page1/ редирект на http://www.sitename.ru/catalogue/categoryname/

Хотя на самом деле разбивка на страницы — штука неудобная, по возможности стараюсь от нее избавляться. Так для новостей можно использовать деление по дате (показывая, например, анонсы за год).

dmitcat
На сайте с 26.05.2005
Offline
123
#2

можно так:

sitename.ru/category50-p2/

sitename.ru/category50-p3/

...

sitename.ru/category50-p3/item100/

Либо селяВи (http://www.puper.ru), либо селяВас (http://www.puper.ru)!!!
Ayavryk
На сайте с 11.10.2003
Offline
209
#3
Скромный малый:
новый уровень = новый параметр через слэш

а потом меняется структура рубрик и возникают траблы связанные с изменением адресации, появлением дубликатов и т.п.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
Скромный малый
На сайте с 07.03.2008
Offline
99
#4

Спасибо.. Хороший вроде вариант..

/_№_/ - id'шники,

/page_№_/ - подстраницы

Подстраницы всегда в конце, если они есть.. Если пользователь захочет вернуться на уровень вверх, то попадет снова на первую подстраницу разделения... Иначе, он мог бы нажать "назад"

А вот по-поводу редиректа? С http://www.sitename.ru/catalogue/categoryname/page1/ на http://www.sitename.ru/catalogue/categoryname/ ... А красиво ли это? ... Поисковики что будут думать?... Какой редирект (303, 304) им нужно дать, чтобы они не индексировали URL/page1/, а индексировали сразу URL? И еще по поводу редиректа, слышал, что ссылку у страницы "Главная" нужно делать в виде "/" = http://sitename.ru, но по структуре это что-то вроде http://sitename.ru/main/... Тоесть тут опять речь о редиректе? как его правильно сделать для поисковиков, ведь ссыолка будет светится http://sitename.ru/main/, а хотелось бы чтобы поисковик считал, что это http://sitename.ru...

И еще вопросик.. Некоторые сайты подставляют в конец своих ЧПУ ".htm" : http://sitename/cat/1.htm Оправдано ли это?

2dmitcat: Можно конечно и так, у меня вообще было так: http://sitename.ru/m-catalog/item-1.htm

т.е. ключ-значение/ Но хочется красивее...

Николай В.
На сайте с 07.09.2006
Offline
62
#5
Скромный малый:
Какой редирект (303, 304) им нужно дать, чтобы они не индексировали URL/page1/, а индексировали сразу URL?

Мне кажется логичным 301 Moved Permanently. И индексировать поисковики там ничего не смогут, так как вы отдаете заголовок и все. А чтобы вообще обезопасить себя от недоразумений, не используйте ссылки с /page1/ в принципе. Если совсем редиректам не доверяете, отдавайте 404 Not found для /page1/.

Про главную ничего не понял, если честно. По структуре и по логике главная должна отзываться на URI — /

Скромный малый
На сайте с 07.03.2008
Offline
99
#6

Ну про главную я и имел ввиду, что ее надо показывать как "/", хотя она также структурно является разделом сайта. Так почему бы не обобщить этот принцип и на первую страницу при страничном разбиении. Ссылка на первую страницу фактически ссылка на раздел без идентификатора страницы...

А почему так страшны дубликаты (одинаковая страница по 2м различным адресам)? Я понимаю что это не хорошо, но всё же?

Николай В.
На сайте с 07.09.2006
Offline
62
#7
Скромный малый:
Так почему бы не обобщить этот принцип и на первую страницу при страничном разбиении.

В связи с тем, что основная цель rewrite-эмуляции системы каталогов в URL — обеспечение навигации через адресную строку, т.е. если вы будете использовать /category/page1/ для отображения первой страницы, то вам нечего будет показывать для /саtegory/.

На самом деле это дело вкуса: я бы вообще в большинстве случаев отказался от разбивки на пронумерованные страницы, т.к. прощелкивать их, выискивая нужное, — мучение.

Pavka
На сайте с 20.05.2005
Offline
82
#8
Николай В.:
Я делаю так:
http://www.sitename.ru/catalogue/categoryname/page2/ — это вторая страница
http://www.sitename.ru/catalogue/categoryname/2/ — это товар с кодом(id) равным 2.

Николай, а зачем в урл вводить лишние элементы, такие как /catalogue/categoryname?

Ведь по-любому выборка из базы идет по конечному ID

Оно конечно понятно, что на вкус и цвет - товарисчей нет... но все же? :)

Мне кажется, что так и проще и легче запоминается адрес:

http://www.sitename.ru/categoryname/ (http://www.sitename.ru/category2/)

http://www.sitename.ru/2/ (http://www.sitename.ru/id2/)

Без подписи
Николай В.
На сайте с 07.09.2006
Offline
62
#9

Затем, что если делать rewrite, то делать тотально. У меня на сайтах есть страницы:

/about-company/

/contacts/

/news/

/news/2007/

/articles/

/articles/btl/

/catalogue/

/catalogue/categoryname/

Я не считаю, что замена урлов типа «index.php?category=1&product=2» на что-то условное без «.php?…» должна быть самоцелью. Я хочу, чтобы мой пользователь, если ему взбредет в голову, мог удалить часть урла в адресной строке и перейти на уровень выше в моей страничной иерархии.

Что же касается самого кода, то с некоторых пор я отказался от стопки rewrite-правил в .htaccess в пользу единого бутстартера и механизма роутинга, т.е. я делаю что-то вроде RewriteRule ^(.*)$ start.php?route=$1 и всё.

PS: Кстати, вроде была толковая заметка на тему ЧПУ. То ли у Лебедева, то ли у Якоба Нильсена.

denis716
На сайте с 12.09.2007
Offline
115
#10

С точки зрения логики урлов site.ru/cat1/ - это раздел и по запросу должен выдавать стартовую страницу раздела.

В разделе мы можем хранить например страницы:

site.ru/cat1/page1.html

site.ru/cat1/page2.html

или подразделы:

site.ru/cat1/subcat1/

site.ru/cat1/subcat2/

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

Это, на мой взгляд и есть человеко-понятные URL

Если страница содержит слишком много материала, и удобней выводить ее частями, то можно использовать на свое усмотрение:

site.ru/cat1/page1-1.html

site.ru/cat1/page1-2.html

или мне более нравится такой вариант:

site.ru/cat1/page1.html?1

site.ru/cat1/page1.html?2

Анализ URI предпочитаю производить так:

в .htaccess что-то вроде

RewriteRule ^(.*)$ index.php?path=$1

а в пхп уже анализируем $_REQUEST['path'] по своему усмотрению.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий