pnd8_rasp/app/engine/rewrite.php

83 lines
2.2 KiB
PHP

<?php
if ($_SERVER['REQUEST_URI'] == '/index.php' ) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: /");
die();
}
$q = $_GET['q'];
$url_arr = explode('/', $q);
foreach($url_arr as $k => $v ) {
if (empty($v) ) unset($url_arr[$k]);
}
if ( !empty($url_arr) ) {
// Èùåì page1...999 è óäàëÿåì èõ, ïðèñâàèâàÿ $_GET[curpage]
foreach( $url_arr as $k => $url ) {
if ( preg_match( '/page(\d{1,})/', $url, $page_id ) ) {
$_GET['page'] = $page_id[1];
unset($url_arr[$k]);
}
}
foreach( $url_arr as $k => $url ) {
if ( preg_match( '/start(\d{1,})/', $url, $page_id ) ) {
$_GET['start'] = $page_id[1];
unset($url_arr[$k]);
}
}
// Èùåì _f_*--* è óäàëÿåì èõ, ïðèñâàèâàÿ $_GET[_f][k] = v
foreach( $url_arr as $k => $url ) {
if ( preg_match( '/_f_(.*?)--(\d{1,})/', $url, $arr ) ) {
$_GET['_f'][$arr[1]] = $arr[2];
unset($url_arr[$k]);
}
}
$url_arr = array_values($url_arr);
$cnt = count($url_arr);
if ($cnt > 1 ) {
$l1_url = $url_arr[0];
} else {
$l1_url = '';
}
$full_url = db_escape_string(implode('/', $url_arr));
$db2 = $core_db->q('SELECT `obj_name`, `attr_templ` FROM `_sys_datatypes` WHERE `attr_type` = "full_url" AND `attr_templ` LIKE "'.db_escape_string($l1_url).'|%"');
while($db2->nr()) {
$obj_name = $db2->f('obj_name');
list( $url_prefix, $url_cat, $postfix ) = explode('|', $db2->f('attr_templ'));
$db3 = $core_db->q('SELECT `id` FROM `' . $obj_name . '` WHERE `url` = "' . $full_url . '"');
if ($db3->nr() ) {
$_GET['cat'] = $url_cat;
$_GET['id'] = $db3->f('id');
break;
}
}
if ( !$_GET['cat'] ) {
// Åñëè íå íàõîäèì, òî ïàðñèì êàê /cat/key/val/key/val
$_GET['cat'] = $url_arr[0];
for($i=1; $i<=count($url_arr); $i+=2 ) {
$_GET[$url_arr[$i]] = $url_arr[$i+1];
}
define('NOINDEX', 1);
}
} else {
if (!$_GET['cat']) {
$_GET['cat'] = 'index';
}
}
if ( !$_GET['cat'] ) {
header("HTTP/1.1 404 Not Found");
$_GET['cat'] = '404';
}
?>