Псевдонимы из русских в английские по всему сайту (MySQL+htaccess), редиректы

Иногда всплывает необходимость изменить на сайте все русские алиасы страниц (или встречающиеся отдельные русские буквы в алиасах) на английский транслит. Например, страница /сайт превратится в /sait и т.п.

Эта ситуация может возникнуть, если вы:

  • Выбрали для себя продвижение сайтов со страницами, псевдонимы которых описываются только латинскими буквами.
  • В ситуации, когда у вас на сайте есть псевдонимы с русскими буквами, вы обновили панель управления, Transalias слетел, начал переименовывать страницы самостоятельно сразу после сохранения, а вы этого не заметили, но через какое-то время обнаружили, что множество ссылок, ведущих на сайт, оказались битыми (старые страницы ведь отсутствуют!)

Мануал ниже бонусом также меняет пробелы на знаки дефиса.

Методика

Вначале в файле .htaccess (ОБЯЗАТЕЛЬНО ПРОЧИТАЙТЕ ЭТУ МИНИ-СТАТЬЮ ПЕРЕД РАБОТОЙ С .HTACCESS) в корне сайта прописываем следующие редиректы сразу перед строкой ЧПУ. В MODX EVO это делается перед этой строкой:

  • RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Вставляем этот код:

  • RewriteRule ^(.*)\s(.*)$ $1-$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)а(.*)$ $1a$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)б(.*)$ $1b$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)в(.*)$ $1v$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)г(.*)$ $1g$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)д(.*)$ $1d$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)е(.*)$ $1e$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ё(.*)$ $1jo$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ж(.*)$ $1zh$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)з(.*)$ $1z$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)и(.*)$ $1i$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)й(.*)$ $1j$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)к(.*)$ $1k$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)л(.*)$ $1l$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)м(.*)$ $1m$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)н(.*)$ $1n$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)о(.*)$ $1o$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)п(.*)$ $1p$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)р(.*)$ $1r$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)с(.*)$ $1s$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)т(.*)$ $1t$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)у(.*)$ $1u$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ф(.*)$ $1f$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)х(.*)$ $1h$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ц(.*)$ $1tz$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ч(.*)$ $1ch$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ш(.*)$ $1sh$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)щ(.*)$ $1sch$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ъ(.*)$ $1j$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ы(.*)$ $1y$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ь(.*)$ $1j$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)э(.*)$ $1ae$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)ю(.*)$ $1ju$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)я(.*)$ $1ja$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)А(.*)$ $1a$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Б(.*)$ $1b$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)В(.*)$ $1v$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Г(.*)$ $1g$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Д(.*)$ $1d$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Е(.*)$ $1e$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ё(.*)$ $1jo$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ж(.*)$ $1zh$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)З(.*)$ $1z$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)И(.*)$ $1i$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Й(.*)$ $1j$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)К(.*)$ $1k$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Л(.*)$ $1l$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)М(.*)$ $1m$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Н(.*)$ $1n$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)О(.*)$ $1o$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)П(.*)$ $1p$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Р(.*)$ $1r$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)С(.*)$ $1s$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Т(.*)$ $1t$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)У(.*)$ $1u$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ф(.*)$ $1f$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Х(.*)$ $1h$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ц(.*)$ $1tz$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ч(.*)$ $1ch$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ш(.*)$ $1sh$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Щ(.*)$ $1sch$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ъ(.*)$ $1j$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ы(.*)$ $1y$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ь(.*)$ $1j$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Э(.*)$ $1ae$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Ю(.*)$ $1ju$2 [R=301,L,N,QSA]
  • RewriteRule ^(.*)Я(.*)$ $1ja$2 [R=301,L,N,QSA]

В базе данных необходимо заменить все русские буквы на английские, но только лишь в алиасах страниц.

Для этого меняем таблицу iavz_site_content под название таблицы из своей CMS, меняем поле alias на поле, которое используется в вашей CMS и просто отправляем на выполнение код ниже.

  • UPDATE iavz_site_content SET alias=REPLACE(alias,' ','-') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'а','a') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'б','b') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'в','v') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'г','g') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'д','d') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'е','e') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ё','jo') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ж','zh') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'з','z') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'и','i') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'й','j') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'к','k') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'л','l') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'м','m') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'н','n') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'о','o') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'п','p') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'р','r') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'с','s') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'т','t') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'у','u') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ф','f') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'х','h') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ц','tz') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ч','ch') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ш','sh') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'щ','sch') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ъ','j') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ы','y') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ь','j') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'э','ae') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'ю','ju') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'я','ja') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'А','a') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Б','b') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'В','v') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Г','g') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Д','d') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Е','e') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ё','jo') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ж','zh') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'З','z') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'И','i') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Й','j') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'К','k') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Л','l') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'М','m') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Н','n') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'О','o') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'П','p') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Р','r') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'С','s') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Т','t') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'У','u') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ф','f') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Х','h') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ц','tz') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ч','ch') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ш','sh') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Щ','sch') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ъ','j') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ы','y') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ь','j') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Э','ae') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Ю','ju') WHERE id > 0;
  • UPDATE iavz_site_content SET alias=REPLACE(alias,'Я','ja') WHERE id > 0;

Когда в базе все алиасы заменены на транслит и прописаны редиректы в htaccess, стоит поискать в Базе Данных все места, в которых в ссылке используются русские буквы.

Регулярных выражений, которые подходят для решения этой задачи, достаточно много, можно спорить о более правиьлном, я просто приведу одно из тех, которые помогут найти русские псевдонимы на небольшой сайте:

  • href\=\\\"[^\[\\].{,8}[а-яА-Я]
Яндекс.Метрика