Делаем ЧПУ ссылки на сайте


В этой статье мы будем делать, так называемые, ЧПУ ссылки. ЧПУ – значит человекопонятные УРЛ. Их преимущество в том, что они удобны для восприятия. Посетитель видит не адрес вида site.ru/index.php?id=12345, а он сразу из ссылки может понять что будет отображаться на этой странице. Например, по адресу site.ru/vakansiya/programmist будет понятно, что на странице будут представлены вакансии программистов. Второй плюс таких ссылок в том, что их больше любят поисковые системы, то есть таким ссылкам отдается предпочтение и они отображаются прямо в поисковой выдаче.

Мы будем делать ЧПУ на примере сайта работы. Предположим, что у нас есть файл вывода вакансий каталога вакансий - index.php. Переменная GET запроса razdel – это идентификатор раздела, то есть получаем ссылку в раздел каталога (например вакансии программистов) index.php?razdel=5. В базе данные хранятся в таком виде:

CREATE TABLE `category` (
ID INT(3),
razdel TEXT
)

Для начала добавим в базу новое текстовое поле `chpu`.

Теперь сделаем преобразование названия раздела из кириллицы в транслитерацию. То есть название раздела «Программист» у нас будет сохранено в базе как ‘programmist’. Для этого напишем такую функцию:

function rl ($string)
{
$string = strtr( $string, 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ','йцукенгшщзхъфывапролджэячсмитьбюё');
$string = mb_strtolower($string);
$string = ereg_replace("ё","e",$string);
$string = ereg_replace("й","y",$string);
$string = ereg_replace("ю","yu",$string);
$string = ereg_replace("ч","ch",$string);
$string = ereg_replace("щ","sch",$string);
$string = ereg_replace("ц","c",$string);
$string = ereg_replace("у","u",$string);
$string = ereg_replace("к","k",$string);
$string = ereg_replace("е","e",$string);
$string = ereg_replace("н","n",$string);
$string = ereg_replace("г","g",$string);
$string = ereg_replace("ш","sh",$string);
$string = ereg_replace("з","z",$string);
$string = ereg_replace("х","h",$string);
$string = ereg_replace("ф","f",$string);
$string = ereg_replace("ы","yi",$string);
$string = ereg_replace("в","v",$string);
$string = ereg_replace("а","a",$string);
$string = ereg_replace("п","p",$string);
$string = ereg_replace("р","r",$string);
$string = ereg_replace("о","o",$string);
$string = ereg_replace("л","l",$string);
$string = ereg_replace("д","d",$string);
$string = ereg_replace("ж","j",$string);
$string = ereg_replace("э","ye",$string);
$string = ereg_replace("я","ya",$string);
$string = ereg_replace("с","s",$string);
$string = ereg_replace("м","m",$string);
$string = ereg_replace("и","i",$string);
$string = ereg_replace("т","t",$string);
$string = ereg_replace("б","b",$string);
$string = ereg_replace("ь","",$string);
$string = ereg_replace("ъ","",$string);
$string = ereg_replace(",","_",$string);
$string = ereg_replace(" ","_",$string);
$string = ereg_replace("\.","_",$string);
$string = ereg_replace("/","_",$string);
$string = ereg_replace('%',"_",$string);
$string = ereg_replace("-","_",$string);
$string = ereg_replace('\(',"_",$string);
$string = ereg_replace('\)',"_",$string);
$string = ereg_replace('\'',"_",$string);
$string = ereg_replace('\"',"_",$string);
$string = ereg_replace('\'',"_",$string);
$string = ereg_replace('%',"",$string);
$string = ereg_replace('__',"_",$string);
return $string;
}

Эта функция будет заменять русские знаки на английские.

Таким образом, чтобы получить значение переменной chpu надо вызвать функцию:

$chpu=rl($razdel); // $razdel – название раздела на русском

Теперь значение переменной $chpu записываем в базу данных в поле `chpu`.

Теперь включаем ЧПУ в файле .htaccess в папке с сайтом. Для этого добавляем туда такие строки:

RewriteEngine on
RewriteRule ^ vakansiya /([-a-zA-Z0-9_]+)? index.php?razdel=$1 [L]

Данная конструкция будет просматривать ссылки и если в ней будет встречаться фраза vakansiya/название_раздела, то она будет осуществлять перенаправление на страницу index.php с занесением в переменную $razdel значения, стоящего строки фразы vakansiya/.

То есть, перейдя по ссылке «site.ru/vakansiya/programmist» мы на самом деле не попадаем в подкаталог vakansiya/programmist, а перенаправляемся на страницу index.php, и в переменную $_GET[‘razdel’] будет записано значение “programmist”. Такие манипуляции будут только на уровне движка. Визуально посетитель будет видеть, что он находится на странице vakansiya/programmist, а не на странице index.php.

Теперь нужно найти нужный нам раздел в базе данных. Ведь ранее обращение к нужной категории вакансий было по идентификатору раздела (id), а сейчас нужно найти выбранный раздел по названию. Поэтому в начале файла index.php пишем следующий код:

$razdel=$_GET['razdel']; // получаем значение GET, в нашем случае это значение $razdel=’programmist’;
$result = @mysql_query("SELECT * FROM `category` WHERE chpu='$razdel’");
while($myrow=mysql_fetch_array($result)) {
$razdel=$myrow["ID"];
}

Этим кодом мы в базе данных находим по полю `chpu` нужный нам раздел и присваиваем его значение переменной $razdel. То есть дальше работа с выводом нужных разделов будет осуществляться дальше как и раньше по значению переменной ID.

Обратите внимание, что когда вы используете на сайте ЧПУ, то все ссылки должны иметь абсолютный вид, то есть начинаться с http://, иначе, если пользователь, находясь на странице http://site.ru/vakansiya/programmist нажмет на относительную ссылку <a href=index.php>На главную</a>, то он попадет на несуществующую страницу http://site.ru/vakansiya/programmist/index.php. Поэтому ссылку надо записывать в виде <a href= http://site.ru /index.php>На главную</a>.

С построением ЧПУ ссылок можно встретиться в наших скриптах недвижимости, доски объявлений, продажи авто и других.

©Невежин Евгений
http://nevius.ru
28.02.2016

При перепечатке информации ссылка на сайт http://nevius.ru обязательна.