ЧПУ
Начал разработку CashFinder и решил поделиться с вами, дорогие читатели, скриптом ЧПУ. В моем варианте он позволяет создавать статические и динамические страницы, просто добавляя их адрес, название и текст или путь к модулю в соответствующие таблицы базы данных. Также можно получать параметры из адреса, к примеру, id просматриваемой новости (http://ваш_сайт.ру/news/1/)
Итак, для начала в файле .htaccess нужно прописать:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]
Затем в файле index.php пишем:
$page_url = $_SERVER['REQUEST_URI'];
$page_url = trim($page_url, '/');
$page_url = strtolower($page_url);
if (!$page_url) $page_url = 'index';
$params = explode('/', $page_url);
$i = count($params);
while ($i > 0)
{
$query = mysql_query("SELECT * FROM `module` WHERE `url`='".$page_url."'");
if (mysql_num_rows($query))
{
$page_name = mysql_result($query, 0, 'name');
$page_file = mysql_result($query, 0, 'file');
break;
}
else
{
$query = mysql_query("SELECT * FROM `page` WHERE `url`='".$page_url."'");
if (mysql_num_rows($query))
{
$page_name = mysql_result($query, 0, 'name');
$page_text = nl2br(mysql_result($query, 0, 'text'));
break;
}
else
{
$page_url = str_replace('/'.$params[$i-1], '', $page_url);
$page_par = $params[$i];
}
}
$i--;
}
$page_url = implode("/", $params);
if (!$page_name)
{
$page_text = 'Ошибка 404' ;
$page_name = 'Страница не найдена';
}
Итак, сначала получаем адрес страницы и записываем в переменную $page_url. Затем убираем слеши и приводим все к нижнему регистру, не забыв, что если запрос пустой, значит это — главная страница.
Создаем массив с отдельными частями адреса и начинаем искать в БД его примерно по такому принципу: к примеру, адрес страницы user/edit/34. Сначала в базе ищется полностью адрес. Если не найден, удаляется последний параметр и $page_url становится равным user/edit. И так ищем пока что-нибудь не найдем (выход из цикла с помощью break) или пока не перепробуем все варианты.
Если ничего не найдено, то записываем в необходимые переменные информацию об ошибке, если найдено — то обрабатываем, как нам нужно и выводим (в зависимости от того, найдена ли страница — выводим содержимое или файл модуля — инклудим)
Вот и все, человеко-понятный урл готов!

Комментов пока нет