Redirect в системе, перенос сайта на umi.cms, ч.2 — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: « category:Архитектура UMI.CMS С первой статьей по данной тематике можно ознакомиться по этой с…») |
Mad grant (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
− | + | [[Категория:Вопросы установки настройки и переноса]] | |
С первой статьей по данной тематике можно ознакомиться по этой ссылке [[Redirect в системе, перенос сайта на umi.cms]]. | С первой статьей по данной тематике можно ознакомиться по этой ссылке [[Redirect в системе, перенос сайта на umi.cms]]. | ||
Строка 9: | Строка 9: | ||
Для настройки такого непростого редиректа, можно воспользоваться более хитрой схемой. | Для настройки такого непростого редиректа, можно воспользоваться более хитрой схемой. | ||
− | В корне сайта сделаем копию файла '''index.php''' и переименуем его в '''index2.php'''. В самом файле изменим строку: | + | В корне сайта сделаем копию файла '''index.php''' и переименуем его в '''index2.php'''. Файл index.php необходимо переименовать, к примеру в index.php_old, и также важно учитывать, что при обновлении системы этот файл снова появится, его необходимо будет снова переименовать, если редирект все еще будет нужен. |
+ | |||
+ | В самом файле index2.php изменим строку: | ||
<pre> | <pre> | ||
require CURRENT_WORKING_DIR . '/libs/root-src/index.php'; | require CURRENT_WORKING_DIR . '/libs/root-src/index.php'; | ||
Строка 53: | Строка 55: | ||
list($target, $status) = mysql_fetch_row($result); | list($target, $status) = mysql_fetch_row($result); | ||
+ | $target = trim($target, '/'); | ||
if($referer = getServer('HTTP_REFERER')) { | if($referer = getServer('HTTP_REFERER')) { |
Текущая версия на 21:38, 4 июня 2013
С первой статьей по данной тематике можно ознакомиться по этой ссылке 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.