SEO редирект на PHP
Одним редиректом с http на https, с www на без www, с index.php на /, с /section на /section/, с IP (123.123.12.12) на домен (site.ru), а так же убирает двойной слеш.
Добавляем в init.php
global $APPLICATION; if ( // Когда применять правило mb_strlen($_SERVER["SERVER_NAME"]) > 0 && !defined('ADMIN_SECTION') && mb_strpos($APPLICATION->GetCurPage(false), '/personal/') === false && // Если адрес подходит под одно из правил ( filter_var($_SERVER['HTTP_HOST'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false || $_SERVER["HTTPS"] != 'on' || mb_strpos($_SERVER["SERVER_NAME"], 'www.') !== false || mb_strpos($_SERVER["REQUEST_URI"], '/index.php') !== false || (mb_strpos($_SERVER["REQUEST_URI"], '?') !== false && mb_strpos($_SERVER["REQUEST_URI"], '/?') === false && mb_strpos($_SERVER["REQUEST_URI"], '.') === false) || (mb_strpos($_SERVER["REQUEST_URI"], '?') === false && mb_substr($_SERVER["REQUEST_URI"], -1) != '/' && mb_strpos($_SERVER["REQUEST_URI"], '.') === false) || mb_strpos($_SERVER["REQUEST_URI"], '//') !== false ) ) { // Формируем правильный URL if (mb_strpos($_SERVER["REQUEST_URI"], '?') === false) { $_SERVER["REQUEST_URI"] .= '/'; $_SERVER["REQUEST_URI"] = str_replace('//', '/', $_SERVER["REQUEST_URI"]); } elseif (mb_strpos($_SERVER["REQUEST_URI"], '?') !== false && mb_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); // И делаем 301 редирект LocalRedirect($redirect, false, "301 Moved Permanently"); }
По времени срабатывания идентично варианту через .htaccess, но вместо 2-3 редиректов происходит всего 1.
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.