Здравствуйте.
Здесь я расскажу о том, как просто и удобно организовать технологию ЧПУ на своём сайте.
ЧПУ — это Человеку Понятные УРЛ (URL). В англоязычном интернете называется SEF links — Search Engines Friendly links (ссылки, дружественные поисковым системам).
Это делается для того, чтобы ссылки на страницы вашего сайта имели красивый вид, понятный человеку и дружественный для поисковых систем.
Например, ссылка http://localhost/forum/users/Figaroo/ гораздо легче запоминается человеком, чем http://localhost/?mode=forum&page=users¶m=Figaroo. Также, первую ссылку гораздо легче продиктовать по телефону.
Чтобы перейти на уровень вверх достаточно стереть нужную часть пути, если человек уже был на вашем сайте и набирает адрес страницы вручную, то он сразу может обратиться к нужному ему документу глядя на URL'ы предыдущих запросов.
Пользователь может быстро и безошибочно определить свое местонахождение на сайте. Это удобно.
Также, такие адреса легче и быстрее индексируются поисковыми машинами, такими как Яндекс, Гугль и др.
Теперь о том, как это реализовать для сайта на языке PHP.
В файле .htaccess (расположенном в корневой директории сайта) разместим следующий код:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Далее, в корневой директории сайта создадим файл index.php:
<?php
// предшествующий код сайта
$_URL = preg_replace("/^(.*?)index\.php$/is", "$1", $_SERVER['SCRIPT_NAME']);
$_URL = preg_replace("/^".preg_quote($_URL, "/")."/is", "", urldecode($_SERVER['REQUEST_URI']));
$_URL = preg_replace("/(\/?)(\?.*)?$/is", "", $_URL);
$_URL = preg_replace("/[^0-9A-Za-z._\\-\\/]/is", "", $_URL); // вырезаем ненужные символы (не обязательно это делать)
$_URL = explode("/", $_URL);
if (preg_match("/^index\.(?:html|php)$/is", $_URL[count($_URL) - 1])) unset($_URL[count($_URL) - 1]); // удаляем суффикс
switch (@$_URL[0]) {
case '': /* главная страница */ break;
case 'my_page': /* пример страницы. здесь можно сделать что-нибудь вроде "require_once('./pages/my_page.php');" */ break;
default: /* ошибка - страницы нет. можно послать 404-ый заголовок и показать прикольный текст. */
}
// последствующий код сайта
?>
Таким образом все запросы, кроме запросов к реально существующим на сервере файлам и папкам (к примеру, картинкам, таблицам стилей, скриптам и т.п.), перенаправятся на файл index.php.
В файле index.php создастся переменная-массив $_URL.
К примеру, наш сайт располагается по адресу http://localhost/mysite/.
Тогда, если мы перейдём по адресу http://localhost/mysite/users/Figaroo/edit/ или же http://localhost/mysite/users/Figaroo/edit/index.html,
то $_URL будет равным array('users', 'Figaroo', 'edit').
Дальше index.php может анализировать нулевой элемент массива $_URL и решать, как поступать дальше. К примеру, он может подключать необходимый код с помощью инструкций require или include.
Преимущества данного метода в том, что сайт может находиться во вложенных папках, скажем в http://localhost/sites/my/, при этом массив $_URL не будет «загрязняться» элементами "sites" и "my". Это также даёт возможность переместить сайт во вложенный каталог или каталог выше без потери работоспособности. Также, если к адресу страницы приписать суффикс "index.html" или "index.php", адрес будет вести на страницу без суффикса (как в настоящих директориях).
Спасибо за внимание.
Спасибо за статью! Очень пригодилась!
Комментарий от moonmana — 2 сентября 2009 @ 21:39
Спасибо огромное за статью! Она меня оч выручила!
Для мало малоопотных рекомендую испытать данный скрипт добалением в конец index.php
После этого набираем:
, где $mysite$ – путь к вашему сайту, в том случае если он не расположен в
И смотрим результат =).
Комментарий от v01d.cmd — 16 декабря 2009 @ 19:45
Спасибо огромное! Очень долго искал нечто такое! Мой ход – после разбора массива я по уникальному псевдониму ищу запись в базе (при создании записи псевдоним тоже вводится вручную) и делаю выборку. Примерно так получается
Вобщем все работает просто идеально!
Комментарий от Евгений — 22 января 2010 @ 17:00