Универсальная заготовка для ЧПУ mod_rewrite

lonejan

Постоялец
Регистрация
7 Фев 2008
Сообщения
128
Реакции
11
Моя заготовка для ЧПУ, может кому пригодится. На выходе получаем управление в файле index.php (или другом) с массивом параметров ЧПУ, без GET и базовый URL ЧПУ, без GET.

Например:
example.com/catalog/beer/dark/?page=2

будет иметь на выходе:
$BaseURL = '/catalog/beer/dark'

$ArrayURL =
Array
(
[0] => catalog
[1] => beer
[2] => dark
)

Ну и массив $_GET, само собой будет содержать все значения GET параметров.

.htaccess
Код:
AddDefaultCharset UTF-8
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]
Options -Indexes

index.php
PHP:
// Разбираем ЧПУ в массив
function ExtractRewritedParameters($RewritedURL)
{
    $RewritedURL = rawurldecode($RewritedURL);
    $RewritedURLArray = explode("/",$RewritedURL);
    $ParametersQty=sizeof($RewritedURLArray);
    $RewritedParameters=array();
    for($i=0; $i<$ParametersQty; $i++){
        if (trim($RewritedURLArray[$i]{0}) == '?') {
            break;
        }
        if (trim($RewritedURLArray[$i]) == ""){
            continue;
        }
        $RewritedParameters[]=trim($RewritedURLArray[$i]);
    }
    return $RewritedParameters;
}
$ArrayURL = ExtractRewritedParameters($_SERVER['REQUEST_URI']); //Массив ЧПУ, без GET
$BaseURL = implode('/', $ArrayURL); //Базовый URL ЧПУ, без GET

Плюс в нагрузку прикладываю часть кода с SQL запросом для таблицы URL'ов.
PHP:
// Поиск ресурса по URL

$Res = mysql_query("SELECT urls.url AS url, urls.resource AS resource FROM urls WHERE '/".mysql_real_escape_string($BaseURL)."' LIKE concat(urls.url,'%') AND urls.enabled = 1 ORDER BY LENGTH(urls.url) DESC");
Структура таблицы, думаю, понятна. Могут быть ресурсы (модули) с URL "/catalog". То по запросу "/catalog/beer/light", вытянется ссылка на ресурс/модуль с базовым URL "/catalog". Дальше ему можно передать управление и его базовые параметры ЧПУ (/beer/light).
 
Назад
Сверху