Бесплатная CMS для вашего сайта Разумная альтернатива WordPress

Создание редиректов в MaxSite CMS

16-04-2011Время чтения ~ 5 мин.Roadmap 4395

При переносе сайта или смене «движка» часто возникает задача сохранить старые адреса. Например в MaxSite CMS принято в ЧПУ указывать тип данных: page, category и т.п. А, скажем, в WordPress ЧПУ настраивается произвольно и многие вебмастера формируют шаблона на основе каких-то своих предпочтений. Понятно, что если переходить на MaxSite CMS, то адреса могут смениться. Главная проблема здесь возникает в том, что потребуется некоторое время на новую индексацию поисковиков и при этом будет утеряны рейтинги PR, потому что Гугл присваивает значение для каждой страницы сайта.

Второстепенный момент - если какие-то страницы «раскручены», то смена её адреса может сказаться на общей посещаемости сайта.

MaxSite CMS предлагает несколько вариантов решений таких задач.

Первый и самый простой способ - это воспользоваться плагином редиректа, который входит в комплект системы.

Необходимо задать шаблон или точный входящий и конечный адреса.

Если посетитель входит по старому адресу, плагин на этапе инициализации системы, находит новый и автоматом делает редирект.

Кроме этого можно сразу указать тип редиректа: 301 или 302. 301-редирект используется, когда требуется сообщить поисковику, что страница перемещена постоянно; 302 - времено. Понятно, что для вебмастера наибольший интерес представляет именно 301-редирект.

  

С помощью плагина редиректа удобно задавать небольшие объемы адресов. Но иногда возникает задача сделать перенос целого сайта на MaxSite CMS и таких редиректов может возникнуть десятки или сотни. В этом случае довольно проблематично прописывать их все в плагине, да и придется постоянно поддерживать их в актуальном состоянии.

На сей счёт лучше воспользоваться другим способом. В этом варианте редирект делаем только в случае возникновения 404-ошибки. То есть посетитель обращается по старому адресу и не находя запись переходит на 404-тип. Система проверит наличие старого адреса в метаполях всех записей и, найдя в них входящий адрес (это и есть старый адрес), сделает редирект на адрес найденной записи.

Рассмотрим пошагово.

В meta.ini своего шаблона указываем секцию для адреса:

[Старый адрес]
options_key = redirect
type = textfield
description = "Укажите старый адрес записи. Адрес указывается относительно сайта, например для адреса <strong>http://site.com/mypage.html</strong> указываем <strong>mypage.html</strong>"
default = ""

В своём шаблоне делаем каталог type в который копируем из default-шаблона файл page_404.php. Перед строчкой


if ( mso_get_option('page_404_http_not_found', 'templates', 1) ) ...

Добавляем код:

	// все адреса для редиректов
	require(getinfo('template_dir') . 'redirect-url.php');
	
	// адреса в массив
	$my_redirect = explode("
", $redirect_url);
	
	// есть вхождение?
	if (in_array(mso_current_url(), $my_redirect) !== false)
	{
		$pages = mso_get_pages(array(
			'no_limit' => true, // все записи без лимита
			'pagination' => false, // пагинация не нужна
			'type' => false, // все типы записей
			'get_page_count_comments' => false, // комментарии не нужны
			'get_page_categories' => false, // рубрики не нужны
			'content' => false, // тексты не нужны
			'custom_type' => 'tag', // получаем как тип tag (мета) 
			
			// мета-поле где указывается первоначальный адрес относительно сайта
			// поле определяется в meta.ini шаблона
			'meta_key' => 'redirect', 
			
			'slug' => mso_current_url(), // ищем текущий url в значении redirect
			
			), $par);
		
		if ($pages) // есть страницы
		{
			// адрес для редиректа
			$url = 'page/' . $pages[0]['page_slug'];
			
			mso_redirect($url, false, '301'); // делаем 301-редирект
		}
	}

Данный код подключает файл redirect-url.php в шаблоне, где в текстовом виде хранятся адреса для редиректов. После обработки адресов, происходит поиск старого адреса в мета-данных записей и, если такой адрес находится, то на неё происходит 301-редирект. Если же такой записи нет, то происходит стандартная выдача 404-страницы.

Файл redirect-url.php должен быть такого вида:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
 
$redirect_url = 
'contact.shtml
about.shtml
day.shtml';

Каждый адрес размещается в одной строчке. Адреса задаются относительно сайта.

Как вариант, если предполагается, что адреса будут меняться, можно сделать опцию в options.ini шаблона, где и указывать список. Значение опции подставлять в $redirect_url. В этом случае адреса задаются в админ-панели, без необходимости править файл redirect-url.php.

Чтобы получить список адресов можно воспользоваться различными сервисами по созданию карты сайта, а если сайт зарегистрирован в sape.ru, то можно экспортом данных страниц:

На выходе будет обычный текстовый файл, в котором нужно будет только убрать ведущий слэш (/).

В заключении два момента, которые могут влиять на редиректы.

Первый. В MaxSite CMS можно опционально указывать отправку 404-заголовка для ненайденных страниц. Бывают ситуации, когда после переноса сайта нужно обеспечить сохранность адресов (хотя бы временно), не заботясь об их содержимом. В этом случае мы просто отключаем 404-заголовок и поисковики как и прежде видят «найденные страницы». Посетитель же получает стандартную страницу с «ничего не найдено».

Данная опция находится в Настройках шаблона - 404 http-заголовок:

Второй момент. MaxSite CMS поддерживает синонимы страниц для типов page и category. Например, страница site.com/page/about и site.com/about будут синонимами. Аналогично для рубрик: site.com/category/news и site.com/news. Сделано это из двух соображений: ради небольшой совместимости с ЧПУ WordPress (как наиболее популярного «движка»), так и ради получения короткой ссылки.

Если вам не нравится такая возможность, то её можно отключить в файле /application/config/mso_config.php

$config['mso_permalink_no_slug'] = "no";

И последнее. Для WordPress'а лучше всего использовать шаблон ЧПУ, который является полностью совместимым с MaxSite CMS:

При таком ЧПУ переход на MaxSite CMS происходит без смены адресов.

Похожие записи
Оставьте комментарий!
Сайт использует cookie
Для улучшения работы сайта собирается анонимная статистика через Google Analytics. Разрешить использование аналитических cookie?