Redirect в системе, перенос сайта на umi.cms, ч.2
С первой статьей по данной тематике можно ознакомиться по этой ссылке 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.