
ЧПУ — это не только красиво и удобно для того чтобы поделиться ссылками с друзьями, но и очень важно при индексации вашего сайта поисковыми системами.
Для поисковых систем Яндекс, Google и Rambler большое значение имеет не только внутренее наполнение сайта, но и ключевые слова в строке адреса. Грамотная оптимизация сайта требует не только уделить большое внимание написанию уникального контента статей на сайте, но и отображению ссылок на эти статьи. К примеру, сайт о веб-дизайне с адресом: «http://пример.com/index.php?page=3&article=5», поисковики хуже воспримут, чем сайт с адресом такого вида: «http://пример.com/веб-дизайн/». Да и обычному пользователю в данном случае проще буде запомнить такой адрес.
Для создание красивых адресов в веб серевере apache есть модуль mod_rewrite. Обычно он включен по-умолчанию почти на всех хостингах. Он работает быстрее, правильней и гибче других методов, типа «чпу при помощи 403 ошибки», и подобных.
В настоящее время при продвижении сайта и интернет-магазина, чпу — это одно из обязательных требований для SEO оптимизации.
Итак рассмотрим пример создания чпу на php:
1. Сделаем файл .htaccess, и включим в нем mod_rewrite:
1 2 3 4 5 6 |
RewriteEngine on RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 |
2. Сделаем файл index.html, это будет первая страница:
1 2 3 |
<h1>Главная страница</h1> <br/> <a href="/hpu/page/article-1/">Статья 1</a> / <a href="/hpu/article-2/">Статья 2</a> |
3. Сделаем файл 1.html, это будет вторая страница:
1 2 3 4 5 |
<span style="color: #0099ff;"><h1></span>Статья 1<span style="color: #0099ff;"></h1></span> <span style="color: #0099ff;"><p></span>Путь к странице <span style="color: #0099ff;"><b></span>/page/article-1/<span style="color: #0099ff;"></b></span>, а файл <span style="color: #0099ff;"><b></span>1.html<span style="color: #0099ff;"></b></span><span style="color: #0099ff;"></p></span> <span style="color: #0099ff;"><br/></span> <span style="color: #0099ff;"><a <span style="color: #94a72e;">href=<span style="color: #e9292a;">"/hpu/page/article-1/"</span></span>></span><span style="color: #0099ff;"><b></span>Статья 1<span style="color: #0099ff;"></b></span><span style="color: #0099ff;"></a></span> / <span style="color: #0099ff;"><a <span style="color: #94a72e;">href=<span style="color: #e9292a;">"/hpu/article-2/"</span></span>></span>Статья 2<span style="color: #0099ff;"></a> </span> |
4. Сделаем файл 2.html, это будет третия страница:
1 2 3 4 |
<h1>Статья 2</h1> <p>Путь к странице <b>/article-2/</b>, а файл <b>2.html</b></p> <br/> <a href="/hpu/page/article-1/">Статья 1</a> / <a href="/hpu/article-2/"><b>Статья 2</b></a> |
5. Сделаем файл index.php, он будет обрабатывать адреса страниц, и реализовывать чпу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php /** * Класс для обработки ЧПУ-запросов * @author www.webinit.ru */ class Router { private $_route = array(); //Переменная хранит маршруты, и файлы, которые будут открываться при определеном маршруте /** * Метод для установки маршрута, и файла который будет открываться при заданом маршруте * @param <string> $dir - маршрут * @param <string> $file - адрес файла */ public function setRoute($dir, $file) { $this->_route[trim($dir, "/")] = $file; } /** * Метод смотрит текущий адрес, и сверяет его с установленными маршрутами, * если для открытого адреса установлен маршрут, то открываем страницу * @return <boolean> */ public function route() { if (!isset($_SERVER["PATH_INFO"])) { //Если открыта главная страница include_once "index.html"; //Открываем файл главной страницы } elseif (isset($this->_route[trim($_SERVER["PATH_INFO"], "/")])) { //Если маршрут задан include_once $this->_route[trim($_SERVER["PATH_INFO"], "/")]; //Открываем файл, для которого установлен маршрут } else return false; //Если маршрут не задан return true; } } $route = new Router; $route->setRoute("page/article-1/", "1.html"); //Устанавливаем маршрут "page/article-1/", и файл который будет открываться при этом маршруте $route->setRoute("article-2", "2.html"); if (!$route->route()) { //Если маршрут не задан.. echo "Маршрут не задан"; } |
.