Если у вас индексируются внутренние адреса страниц и со слешем и без него (‘/’) в конце, т.е. например:
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]

