Иногда веб-разработчики сталкиваются с ситуацией, когда правила 301 редиректа в .htaccess просто не работают. Особенно это актуально для CMS вроде Joomla, WordPress или других фреймворков, где есть сложная система маршрутизации.
Допустим, у вас есть старые страницы:
/deti.html/service.html/lechenie.htmlИ вы хотите сделать 301 редирект на главную страницу. Казалось бы, простое решение — добавить в .htaccess:
Redirect 301 /deti.html /
Redirect 301 /service.html /
Redirect 301 /lechenie.html /
Но... ничего не происходит! Страницы продолжают открываться как обычно.
Причин может быть несколько:
RewriteRule, которые обрабатывают запросы раньше ваших Redirect, то последние просто не срабатывают.Redirect работает через mod_alias, а RewriteRule через mod_rewrite. Они могут конфликтовать.Если .htaccess не работает, можно сделать редирект на уровне PHP. Это гарантированно сработает, так как код выполняется до всей логики приложения.
<?php
// Редирект старых страниц на главную
$current_url = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$redirect_pages = [
'/deti',
'/deti/',
'/deti.html',
'/service',
'/service/',
'/service.html',
'/lechenie',
'/lechenie/',
'/lechenie.html'
];
if (in_array($current_url, $redirect_pages)) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: /');
exit;
}
?>
Для Joomla: в файле /templates/ВАШ_ШАБЛОН/index.php — сразу после открывающего <?php в самом начале файла.
Для других систем: в основном файле шаблона или в файле, который подключается первым (например, header.php).
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) — получает только путь без параметров (например, /lechenie)in_array() — проверяет точное совпадение с массивом страницheader('HTTP/1.1 301 Moved Permanently') — отправляет правильный статус 301header('Location: /') — редиректит на главнуюexit — прекращает выполнение скриптаecho или HTML)Когда .htaccess подводит, а задача срочная — не бойтесь использовать костыли на PHP. Главное — делать это аккуратно и с правильными статусами для поисковиков.
Этот метод спас меня не раз, особенно при миграциях сайтов и чистке старых страниц. Надеюсь, поможет и вам!
Комментарии
Пока нет комментариев. Будьте первым!