Добавляем / в конце URL-адреса
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) https://www.site.ru/$1/ [R=301,L]
Еще вариант добавить слеш в конце урла
RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*[^/])$ $1/ [L,R=301]
И еще вариант
RewriteCond %{REQUEST_URI} !(.*)/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteRule ^(.*)$ $1/ [L,R=301]
Еще один вариант
RewriteCond %{REQUEST_URI} !(.*)/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteCond %{REQUEST_URI} ^(.+)$ RewriteRule ^(.*)$ $1/ [L,R=301]
И еще один вариант
RewriteCond %{REQUEST_URI} !/$ RewriteCond %{REQUEST_URI} !\. RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
Еще один вариант
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$ RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [R=301,L]
Когда несколько сайтов на одном хосте/CMS и нет возможности вставить адрес сайта
RewriteEngine On RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
Костыль для Битрикса
Если ничего не помогает на Битриксе (На других не пробовал), то добавьте php код в самом начале вашего шаблона, header.php (на Битриксе)
<?php if (substr($_SERVER['REQUEST_URI'], -1) !== '/') { header('Location: ' . $_SERVER['REQUEST_URI'] . '/', true, 301); exit; }
Добавил исключение для некоторых разделов в Битриксе, а также исключил урлы с гет-параметрами
if (substr($_SERVER['REQUEST_URI'], -1) !== '/' && empty($_GET) && strpos($_SERVER['REQUEST_URI'], '/personal/') === false && strpos($_SERVER['REQUEST_URI'], '/bitrix/') === false) { header('Location: ' . $_SERVER['REQUEST_URI'] . '/', true, 301); exit; }
Убрать / в конце URL
RewriteEngine On RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ [NC] RewriteRule ^(.*)(/)$ $1 [L,R=301]
В джумле 3 возможен такой вариант, что перестанет заходить в админку после убирания слэша. Для этого убираем редирект из htaccess и в шаблоне в файле (как правило) index.php после строки
defined( '_JEXEC' ) or die( 'Restricted access' );
прописать такой код:
$uri = preg_replace("/\?.*/i",'', $_SERVER['REQUEST_URI']); if ((!strpos($uri, 'administrator')) && (strlen($uri)>1)) { if (rtrim($uri,'/')!=$uri) { header("HTTP/1.1 301 Moved Permanently"); header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace($uri, rtrim($uri,'/'), $_SERVER['REQUEST_URI'])); exit(); } }
Еще варианты убрать слеш в конце
RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1 [R=301,L]
Еще варианты
RewriteBase / RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ [NC] RewriteRule ^(.*)(/)$ $1 [L,R=301]
После удаления слешей при входе в админку иногда возникает ошибка: «На этой странице обнаружена циклическая переадресация ERR_TOO_MANY_REDIRECTS». Это из-за того, что ее адрес должен быть со слешем. Тогда нужно добавить еще строчку, исключающую удаление слеша из адреса админки:
RewriteCond %{REQUEST_URI} !^/admin(/(.*)|$)
(вместо admin прописывается адрес к админке, например, в WordPress это wp-admin, в modx — manager).
Целиком правила получаются вот такие:
RewriteBase / RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ [NC] RewriteCond %{REQUEST_URI} !^/manager(/(.*)|$) RewriteRule ^(.*)(/)$ $1 [L,R=301]
Или такой вариант с исключением:
RewriteBase / RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ [NC] RewriteCond %{REQUEST_URI} !^/admin/ RewriteRule ^(.*)(/)$ $1 [L,R=301]
Описание
Не путать редиректы по убиранию множественных слешей, в том числе и в конце урла, это другое.
На мой взгляд довольно-таки важный редирект, особенно часто встречаю такую проблему у Битрикса (Bitrix). Но и другие CMS этим грешат. Когда подставляя или убирая последний слеш, страница все равно отдает 200 ответ сервера и по сути является дублем, со всеми вытекающими негативными последствиями для поискового ранжирования.
Вообще нет единого мнения, оставлять или убирать слеш в конце URL-адреса. Даже я сам лично на каких-то проектах убираю, на каких-то оставляю. Стараюсь убирать слеш в конце там, где плоская структура URL’ов, например: https://site.ru/something-product-or-article. На мой взгляд так выглядит чисто визуальней более эстетично, если можно применить это в WEB’e 🙂
Ну, а в глубокой структуре стараюсь добавить слеш в конец URL’а, чтобы выглядело более симметрично что ли, например https://site.ru/catalog/category/tovar/, где каждый участок урла закрывается слешем.
Ни в коем образе не претендую на истину в последней инстанции. Это лишь мой опыт, каждый волен настраивать в данных случаях редиректы, как ему будет угодно и здесь нет абсолютно верных или не верных вариантов. Поэтому и представлены оба варианта, а какой выбрать уже ваш выбор.
Спасибо большое, перепробовал кучу редиректов, чтобы добавить слеш в конце, но ничего не помогало, а код PHP для битрикса помог!