Redirect в системе, перенос сайта на umi.cms, ч.2

Материал из Umicms
Версия от 21:38, 4 июня 2013; Mad grant (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск


С первой статьей по данной тематике можно ознакомиться по этой ссылке Redirect в системе, перенос сайта на umi.cms. Если ссылка в предыдущей системе имеют не стандартный вид, к примеру: index.php?option=com_content&view=article&id=10

то стандартной функциональности системы не хватит для настройки редиректа с подобных ссылок, т.к. система анализирует путь страницы, где alt_name разделены знаком "/".

Для настройки такого непростого редиректа, можно воспользоваться более хитрой схемой.

В корне сайта сделаем копию файла index.php и переименуем его в index2.php. Файл index.php необходимо переименовать, к примеру в index.php_old, и также важно учитывать, что при обновлении системы этот файл снова появится, его необходимо будет снова переименовать, если редирект все еще будет нужен.

В самом файле index2.php изменим строку:

require CURRENT_WORKING_DIR . '/libs/root-src/index.php';

на:

require CURRENT_WORKING_DIR . '/libs/root-src/index2.php';

Сделаем копию файла /libs/root-src/index.php и также переименуем его в index2.php. В .htaccess, который находится в корне сайта, в строке:

RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING} [L]

изменим index.php на: index2.php

Теперь при работе сайта, начальная цепочка кода будет проходить через index2.php.

Воспользовавшись статьей Redirect в системе, перенос сайта на umi.cms, добавим в систему необходимые данные для перенаправлений. Пример:

source: index.php?option=com_content&view=article&id=10
target: kompaniya
status: 301

Далее, необходимо в файле /libs/root-src/index2.php, после строк:

$config = mainConfiguration::getInstance();
$buffer = OutputBuffer::current('HTTPOutputBuffer');

прописать следующий код:

$current_path = trim($_SERVER['REQUEST_URI'], '/');
$currentUri = l_mysql_real_escape_string($current_path);

$sql = <<<SQL
SELECT `target`, `status` FROM `cms3_redirects`
WHERE `source` = '{$currentUri}'
ORDER BY `id` DESC LIMIT 1
SQL;
$result = l_mysql_query($sql);
if(mysql_num_rows($result)) {

list($target, $status) = mysql_fetch_row($result);
$target = trim($target, '/');

if($referer = getServer('HTTP_REFERER')) {
$buffer->header('Referrer', $referer);
}
$buffer->status('301 Moved Permanently');
$buffer->redirect("/" . $target . "/");
$buffer->end();
}


Знак SQL; должен быть у самого левого края php-файла. Данный код анализирует адресную строку с учетом GET параметров и в случае нахождения соответствия совершит перенаправление на страницу указанную в столбце target.