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]

 

Вариант выше может и не заработать. Поэтому можно попробовать использовать другой вариант:

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

 

Еще варианты:

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

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]

 

В CMS Modx Revolution для борьбы с множественным слешем можно создать плагин с таким содержимым:

 

<?php switch ($modx->event->name)
{
case 'OnWebPageInit':
        if (stristr($_SERVER['REQUEST_URI'], '//'))
        {
                $g = preg_replace("|[//\s]+|is", "/", $_SERVER['REQUEST_URI']);
                $modx->sendRedirect($g);
        }
        break;
}

И отметить в системных событиях – OnWebPageInit

 

 

Чтобы сделать редирект с адреса index.php на корень сайта, достаточно в файле .htaccess добавить строки:

RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule (.*) %1/%2 [R=301,L]
Метки:
Loading Disqus Comments ...
Loading Facebook Comments ...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *