Админские блоги Юрца

Как сделать ЧПУ - человеко-понятный урл

Как сделать ЧПУ - человеко-понятный урл

Пришлось самому не много погуглить, но везде только обрывки информации на эту тему... Разумеется, во многих готовых движках, типа Joomla или Wordpress это отображение ссылок уже организованно... Но у меня - самописный движок...

По этом чтобы не ковырять код чужих движков, пришлось искать решение...

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

Статья для тех, у кого есть свой сайт на своем движке - самопал, самолеп, и тд и тп =)

Для чего нужен ЧПУ - каждый сам решит по своему, но по моему, если кто-то где-то публикует ссылку на какую-нибудь страницу вашего сайта, то посетители уже будут знать, что они получать пройдя по этой ссылке...

И так - начнем...

Пытка поисковиков не привела ни к чему конктретному, простому... Я, наивный, думал, замутить пару строк в .htaccess и будет мне счастье =)

Но не так все просто =)

И так, выбираем, как должны выглядеть ссылки и к каким параметрам в адресной строке оно пойдет...

Например, я не хочу, чтобы у меня была страница:

http://yurecnt.ru/?id=0 - что тут можно понять?

У нас есть параметр id, которому задается значение 0, но простой смертный юзер, увидев где-то ссылку не поймет, что он тут может найти...

Мы хотим чтобы было:

http://yurecnt.ru/Glavnaya.html

Здесь для примера видно, что это уже - главная страница сайта, возникают ассоциации, что там общая информация, новости или еще что-то, что обычно пишут на главной....

Почему .html - потому что поисковики почему-то по старинке предпочитают иметь дело со статическими html-страницами...

заходим сюда:

http://www.generateit.net/mod-rewrite/index.php

вводим адрес, какой у вас обычно генерируется с параметрами

нажимаем Rewrite URL

и нам предлагается несколько вариантов, как это сделать красиво

по умолчанию, переводит в это http://yurecnt.ru/0.html

уже не плохо, остается добавить ЧПУ

То, что сайт показал в поле Rewrite Rule копируем в .htaccess

И уже можем обращаться так... Но, это всего лишь обращение по ID, нам нужен параметр ЧПУ. То есть в сгенерированном коде либо в исходном меняем id на chpu,

То есть будем вызывать страницу из базы данных не по ID а по понятному значению.

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

И так, с .htaccess и БД понятно... Остается - код, значит, будем кодить...

У меня если ни чего не задано в адресной строке кроме ID, то подключается модуль показа страниц, он берет из бд страницу с нужным ID и отображает. Но сейчас у нас настроенно, что можно брать не только по ID, но и по ЧПУ, так что нам нужно условие, ведь новые страницы или откорректированные будут уже с ЧПУ, следовательно, нам нужен обработчик, который проверяет, задан ли в адресной строке параметр ЧПУ, если да, то ищем по чпу в БД, если нет, вытаскиваем либо главную страницу, либо страницу по ID... То есть получается, что у нас работает два варианта поиска страниц -  по ИД и по ЧПУ, зависит теперь от того, по какой ссылке пройдет юезр, либо по http://yurecnt.ru/?id=0 либо по http://yurecnt.ru/Glavnaya.html

уже отталкиваясь от этой разницы будем искать в БД....

Как же быть с поисковиками? Они не любят клоны страниц... Ведь с точки зрения поисковика эта страница - есть две страницы с одинаковыми данными...

Теперь нам нужен обработчик, который будет смотреть не в адресную строку, а в БД, когда обращаются к странице по ID... Он должен найти (или не найти) в таблице в поле chpu соответствующий параметр, если он есть, то делает редирект с кодом 301 на страницу с http://yurecnt.ru/?id=0 на http://yurecnt.ru/Glavnaya.html и поисковик думает, что у нас не две страницы, а одна, но переехала по новому адресу. Почему нужно делать переадресацию в коде PHP - все потому что на данный момент, у вас может быть уже тысячи страниц на сайте и прописывать для кождой строку в .htaccess будет смерти подобно, здесь же PHP все сделает за вас!

Еще проще с отображением списка страниц - так же модуль, который выводит список страниц, например http://yurecnt.ru/cat/5 тут можно заметить, что некоторые ссылки идут с ЧПУ, некоторые с ИД, так вот, этот модуль так же идет по списку из бд и смотрит, есть ли что-то в поле chpu и если есть, то формирует ссылку так, если нет, то по ID.... Чтобы он все ссылки формировал по ЧПУ, это надо мне взять, не полениться, зайти на каждую страницу и нажать сохранить...

Аналогичным образом будет необходимо поправить скрипт для генерации sitemap.xml, чтобы роботы обращались напрямую к странице, а не к ее номеру и были переброшены уже дальше...

Это статья - не как конкретный мануал, а как краткий принцип формирования красивых ссылок.