lonejan
Постоялец
- Регистрация
- 7 Фев 2008
- Сообщения
- 128
- Реакции
- 11
- Автор темы
- #1
Моя заготовка для ЧПУ, может кому пригодится. На выходе получаем управление в файле 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
index.php
Плюс в нагрузку прикладываю часть кода с SQL запросом для таблицы URL'ов.
Структура таблицы, думаю, понятна. Могут быть ресурсы (модули) с URL "/catalog". То по запросу "/catalog/beer/light", вытянется ссылка на ресурс/модуль с базовым URL "/catalog". Дальше ему можно передать управление и его базовые параметры ЧПУ (/beer/light).
Например:
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");