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

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем lonejan, 26 дек 2013.

  1. lonejan

    lonejan Постоялец

    Регистр.:
    7 фев 2008
    Сообщения:
    110
    Симпатии:
    10
    Моя заготовка для ЧПУ, может кому пригодится. На выходе получаем управление в файле 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).