301 редирект со слешем и без него в конце URL

Если у вас индексируеются внутренние адреса страниц и со слешем и без него («/») в конце, т.е. например:

www.site.ru/catalog/
и
www.site.ru/catalog

то поможет исправить ситуацию следующий код для .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]

UPD: вариант выше на одном из моих сайтов не сработал. Повозившись, нашел на форуме другой вариант, который приводился для какого-то движка:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) http://www.site.ru/$1/ [R=301,L]

Этот вариант заработал как надо.

UPD2: Нашел еще варианты:

#убираем слэш в конце

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

#добавляем слэш в конце

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
  • Проблемка получается в том, что не только каталоги становятся со слешем, но и ссылки вила /online-tv/india/12817-tamil-movies.html/

    Подскажите плиз как исправить?

    Спасибо

  • Автор блога

    Второй вариант пробовали? Который в посте после UPD

  • Анна

    Поскажите, а где именно необходимо размещать ссылку на домен :
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\..{1,10}$
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]

  • Автор блога

    Не ясно из вашего вопроса, о чем вы спрашиваете. Но рискну предположить, что в вашем случае вам надо в указанном вами коде заменить http://www.site.ru в последней строчке на http://www.vashdomen.ru (ваш сайт). Только надо указывать домен либо с www, либо без www, в зависимости от того какое у вас сейчас главное зеркало сайта..) Надеюсь разберетесь.)
    Проще было бы если бы вы указали доменное имя, я бы в ответ вам дал готовый код для копирования и вставки в .htaccess

  • Ziliboba

    Спасибо, помогло, еле нашел как слеш в конце убрать =).

  • Voltos

    Что делать если ни один из вариантов не помог?(

  • Евгений

    Спасибо помогло, другие коды слеш убирают и в админку потом не пускает циклическая ссылка. Спасибо еще раз

  • Александр

    Спасибо автору! Реально рабоатет, другие предложения на других сайтах — не работают никак, а просто убивают сайт для просмотр

  • Alex P

    Автор! 3 дня рыл в инете!

    Единственный вариант работает!

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\..+$
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule (.*) http://www.site.ru/$1/ [R=301,L]

    Он не переводит окончание вида html в вид html/
    и добавляет слеши к контейнерам )

    articles/ — вот такого вида все категории стали, а если набрать articles, то идет автоматический 301 редирект на articles/

    Огромное спасибо!

  • Аркадий

    А мне помогло вот это (в .htacces):

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} (.*)
    RewriteCond %{REQUEST_URI} /$ [NC]
    RewriteRule ^(.*)(/)$ $1 [L,R=301]

  • Владимир

    Для Joomla ни один из вариантов не подошел =( Какие-нибудь идеи почему?

  • Acid

    Спасибо помогло. Нормально работает на джумле.

  • DeadLarsen

    RewriteCond %{REQUEST_URI} !\?
    RewriteCond %{REQUEST_URI} !\&
    RewriteCond %{REQUEST_URI} !\=
    RewriteCond %{REQUEST_URI} !\.
    RewriteCond %{REQUEST_URI} !\/$
    RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

    этот универсальнее

  • Akina

    Я в шоке, целый день поисков и мучений и только ваш вариант оказался рабочим на джумле. Спасибо ))
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !..+$
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule (.*) http://www.site.ru/$1/ [R=301,L]

  • Андрей Белицкий

    все перепробовал. неа

  • # Редирект добавляем слэш
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteCond %{REQUEST_URI} !(.html)$ #строка добавляющая html как исключение
    RewriteRule ^(.*[^/])$ $1/ [L,R=301]

  • Дмитрий

    Здравствуйте! Если Вас не затруднит, подскажите пожалуйста, как склеить страницы с .php и без .php — чтобы автоматически был переброс на страницу без .php

    Перешерстил весь поиск, перепробовал — к сожалению ничего не помогло

    Заранее спасибо Вам

  • Сергей

    А как потом в миралинкс будут выглядеть страницы с ссылками?