В примере 4 страницы, как видим, несколько старых страниц могут ссылаться на одну новую. Иерархия тоже поддерживается.
Создали массив. Теперь нужно узнать id _нового_ сайта в системе HostCMS. Делается это в ЦА, в разделе Сайты. Допустим, id нашего сайта = 2. Тогда сохраняем наш массив в файл под именем site2.php (цифра после слова site = идентификатору сайта.
Создаем в корневой папке HostCMS папочку под названием redirects и кладем наш файл туда.
2. Решение.
Само решение по массовому редиректингу реализуется с помощью еще одного php-файла. Создаем в корневой папке HostCMS файл с названием redirecter.php и помещаем в него следующий код:
<?php
/**
* HostCMS Mass 301 Redirecter
*
* @author Eugene Strigo aka James V. Kotov
* @copyright 2010
*
*/
// прибьем массив редиректов, чтобы не захламлять память
unset($redirects);
}
}
}
}
// подлючим основной index.php
require_once ($script_dir . 'index.php');
?>
3. Включение
Просто создать файл redirecter.php - мало. Надо еще и перенаправить на него все входящие запросы. Для этого открываем файл .htaccess, расположенный в корневой папке HostCMS, и ищем там такие строчки:
В последней строке меняем index.php на redirecter.php и сохраняем изменения.
Внимание! Если у вас в файле redirecter.php будут синтаксические ошибки, то упадет работа вообще всех сайтов, которые есть у вас в системе (если повезет то будут работать только их морды, если не повезет то не будет работать ничего вообще).
Если у вас будут синтаксические ошибки в файле /redirects/site2.php то перестанет работать только сайт с id = 2.
Если это случилось - быстренько меняем в .htaccess redirecter.php обратно на index.php и ищем ошибки.
Что плохо.
Во1х, не ясно как устроен изнутри index.php и как происходит инициализация модулей. Есть предположения, что двойное "поднимание" ядра HostCMS, сначала в редиректере а потом в индексе, может привести к перерасходу памяти.
Может быть разработчики что-нибудь уточнят по этому вопросу?
Во2х, никто кроме администратора не следит за изменениями путей на новом сайте. Если вы где-то изменили пути после создания файла site2.php, например вместо /nasosy/ решили написать /pumps/, то вы должны сами вручную исправить /nasosy/ на /pumps/ везде где оно встречается в файле site2.php
По-хорошему, надо бы написать модуль, в котором соответствие бы сохранялось не в качестве абсолютных url и в виде идентификаторов групп/элементов ИМ/ИС или идентификторов узлов структуры, по которым нужный урл для редиректинга вычислялся бы автоматически.
compaq, значит как всегда что-то не правильно сделали
Скрипт скопирован с рабочего сайта, где уже три недели вовсю редиректит посетителей
Пример массива скопирован оттуда же, только в нем изменены адреса.
Вы-то в массиве свои редиректы прописали? У вас на сайте есть те адреса куда вы редиректите?
Ну что ж, всякое случается, на этот раз я оказался недостаточно предусмотрителен
Дело в том, что у compaq, старые адреса сайте имеют вид
mysite.ru/index.php?name=Archive
и естественно даже при указании редиректера в .htaccess все равно напрямую обрабатываются индексом, потому как не попадают под наложенные на редиректер условия.
означает следующее - если запрашивается не существующий файл или несуществующая папка, то запрос прозрачно переадресовывается файлу redirecter.php, который в свою очередь уже может делать с ним что захочет. А так как файл index.php очень даже существует, то мы имеем прямое обращение к нему.)
Что делать? Добавить в .htaccess после вышепроцитированного правила еще одно: