Редиректы через htaccess для автозамены символов
HTTP версия, заменял три дефиса в урле на один дефис
RewriteRule ^(.*)---(.*) /$1-$2 [L,R=301]
HTTPS версия
RewriteRule ^(.*)---(.*) https://site.ru/$1-$2 [L,R=301]
(.*)---(.*)
— в данном случае показывает, что до и после ---
могут находиться любые символы. Далее мы редиректим на https://site.ru/$1-
$2 где между первой частью и второй частью урла вставляем один дефис. В итоге из такого урла
https://site.ru/something---
234 получим такой https://site.ru/something-
234
Также оставлю еще пару примеров (не проверял, но на их основе делал те, что выше):
Если табуляция и остальные пробельные символы не нужны, то искать пробел так:
RewriteRule "^(.*) (.*)" /$1-$2 [L,R=301]
или
RewriteRule ^(.*)\ (.*) /$1-$2 [L,R=301]
Описание
Иногда CMS генерирует сама дубли записей, товаров, категорий, инфо-страниц. Причем отличаются они, бывают буквально в один символ, и чтобы исправить ситуацию, надо переделывать файлы CMS, где-то даже лезть в ядро, что не очень хочется делать, т.к. при обновлении опять всё вернется обратно.
Также иногда система генерирует sitemap с ненужными символами, а поисковой робот сразу всё проиндексировал. Это мой личный опыт, пример которого можно наблюдать в первом редиректе. Когда в sitemap’е почему-то вместо одного дефиса появились три. Не знаю почему так случилось. Страницы с 3 дефисами отдавали 404 ответ сервера, но это не помешало Яндексу закинуть их все в индекс О_о и повесить плашку в Яндекс Вебмастере о наличии почти 500 дублей. Сайт молодой, отправлять по 20 штук в день на переобход в течение месяца не хотелось, в итоге пришлось настроить редирект, который бы с 3 дефисов редиректил на один, после чего все эти урлы склеились и проблема пропала.