SEO редирект на PHP

Алексей Будагов,

Одним редиректом с http на https, с www на без www, с index.php на /, с /section на /section/, а так же убирает двойной слеш

Добавляем в init.php

global $APPLICATION;

/**
 * 301 Moved Permanently except /personal/, /bitrix/
 * http://site.ru to https://site.ru
 * www.site.ru to site.ru
 * site.ru/section to site.ru/section/
 * site.ru/section?param=value to site.ru/section/?param=value
 * site.ru/section/index.php to site.ru/section/
 * site.ru/section// to site.ru/section/
 */
if (
	
	// Когда применять правило
	strlen($_SERVER["SERVER_NAME"]) > 0 &&
	!defined('ADMIN_SECTION') &&
	strpos($APPLICATION->GetCurPage(false), '/personal/') === false &&
	
	// Если адрес подходит под одно из правил
	(
		$_SERVER["HTTPS"] != 'on' ||
		strpos($_SERVER["SERVER_NAME"], 'www.') !== false ||
		strpos($_SERVER["REQUEST_URI"], '/index.php') !== false ||
		(strpos($_SERVER["REQUEST_URI"], '?') !== false && strpos($_SERVER["REQUEST_URI"], '/?') === false && strpos($_SERVER["REQUEST_URI"], '.') === false) ||
		(strpos($_SERVER["REQUEST_URI"], '?') === false && substr($_SERVER["REQUEST_URI"], -1) != '/' && strpos($_SERVER["REQUEST_URI"], '.') === false) ||
		strpos($_SERVER["REQUEST_URI"], '//') !== false
	)
	
) {
	
	if (strpos($_SERVER["REQUEST_URI"], '?') === false) {
		$_SERVER["REQUEST_URI"] .= '/';
		$_SERVER["REQUEST_URI"] = str_replace('//', '/', $_SERVER["REQUEST_URI"]);
	} elseif (strpos($_SERVER["REQUEST_URI"], '?') !== false && strpos($_SERVER["REQUEST_URI"], '/?') === false) {
		$_SERVER["REQUEST_URI"] = str_replace('?', '/?', $_SERVER["REQUEST_URI"]);
	}
	$_SERVER["REQUEST_URI"] = str_replace('//', '/', $_SERVER["REQUEST_URI"]);
	
	$redirect = 'https://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
	$redirect = str_replace('www.', '', $redirect);
	$redirect = str_replace('/index.php', '/', $redirect);
	LocalRedirect($redirect, false, "301 Moved Permanently");

}

По времени срабатывания идентично варианту через .htaccess, но вместо 2-3 редиректов происходит всего 1. Конечно надо еще потестить, все же обычно на php редиректы не делают.

Опубликовано 17 Апреля 2017 | Обновлено 2 Февраля 2018
web-сервер, делаюИМ, seo

Возврат к списку

Комментарии