В этой небольшой статье мне хотелось бы поделиться с читателями несколькими полезными редиректами, которые я использовал при решении одной из задач по оптимизации сайта нашего клиента.
Итак, начнем.
Редирект с GET-параметром
Задание 1. нужно сделать редирект с /about/news/?PAGEN_1=2 на /news/?PAGEN_1=2. Правильным решением будет использование следующих директив mod_rewrite.
.htaccess
RewriteCond %{QUERY_STRING} PAGEN_1=(\d+)
RewriteRule ^about/news/$ news/?PAGEN_1=%1 [R=301,L]
Задание 2. Нужно сделать редирект с /catalog/section_1/section_2/element_1/?PAGEN_1=4 на /catalog/section_1/section_2/element_1/. То есть фактически убрать GET-параметр.
Решение:
.htaccess
RewriteCond %{QUERY_STRING} PAGEN_1=(\d+)$ [NC]
RewriteRule ^catalog/ section_1/ section_2/element_1/$ section_1/ section_2/element_1/? [R=301,L]
301 редирект со слешем и без него в конце URL
Задание 1. Нужно сделать так, чтобы все URL заканчивались слешем.
Решение. Сначала добавляем слеш в конце URL, затем проверяем не задвоился ли он и если это произошло убираем лишний слеш.
.htaccess
# Ставим слеш в конце URL (/)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) https://princessa.ru/$1/ [R=301,L]
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
# Исключаем все лишние слеши
RewriteRule . %1/%2 [R=301,L]
Редирект с заглавных букв в url на строчные
Задание 1. Нужно сделать так, чтобы все буквы в URL были строчными.
Решение. Это лучше сделать добавив следующий PHP-код в файл header.php шаблона сайта.
PHP
$current_url = $APPLICATION->GetCurDir();
if ( $_SERVER['REQUEST_URI'] != strtolower( $_SERVER['REQUEST_URI']) && $current_url != strtolower( $current_url) ) {
$new_url = str_replace($current_url,'',$_SERVER['REQUEST_URI']);
header("HTTP/1.1 301 Moved Permanently");
header('Location: https://'.$_SERVER['HTTP_HOST'] . strtolower($current_url) . $new_url);
exit();
}
Для проверки корректности редиректов воспользуйтесь сервисом redirect-checker