Как сделать 301 редирект с верхнего на нижний регистр в WordPress

Чтобы исключить дублирование страниц в WordPress — частенько всплывает простая с виду задача — как редирект с верхнего на нижний регистр.

Однако при детальном рассмотрении оказывается все не так уж и просто.

По правильному — редирект лучше всего настраивать на сервере, т.к. это снизит нагрузку на хостинг, однако тут вас ожидает сюрприз — т.к. в .htaccess по простому это не сделать, и нужны или километровые правила например указанные тут https://www.askapache.com/htaccess/rewrite-uppercase-lowercase/#Htaccess_Redirect_Uppercase_Lowercase или доступ к файлу конфигурации Apache httpd.conf что доступно только на серверах, а никак не на хостингах, да еще и требует чтоб Apache  был собран с нужными модулями.

Если вам повезло и звезды сошлись, то сделать редирект с верхнего на нижний регистр вообще для любого движка (а не только для WordPress) можно так

RewriteEngine on
RewriteBase /
RewriteMap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^/?(.*)$ /${lowercase:$1} [R=301,L]

либо так

<IfModule mod_speling.c>
CheckCaseOnly On
CheckSpelling On
</IfModule>

Если же жизнь боль — доступа к редактирования конфига нету, либо туда не хочется лезть чтоб ничего не сломать, либо WordPress работает под nginx, где файла конфига Apache нету в принципе, то есть очень быстрый и простой способ запилить такие редиректы.

Открываем файл functions.php активной темы, и вставляем в конец следующие строки

add_action('parse_request', 'redirectUppercase',0);

function redirectUppercase() {
    if(preg_match('/[A-Z]|/', $_SERVER['REQUEST_URI'])) {
        wp_redirect( $current_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . '://'.$_SERVER['HTTP_HOST'].strtolower($_SERVER['REQUEST_URI']),301);
        exit();
    }

}

Вот и всё :). Способ менее эффективный, чем серверный редирект, но зато в 100500 раз более быстрый и ничего не сломает.

Как это работает.

Если в URL встречается хоть одна большая буква, то с помощью функции wp_redirect происходит 301 редирект на этот же адрес, но с нижний регистром.

2 thoughts on “Как сделать 301 редирект с верхнего на нижний регистр в WordPress”

  1. Код для WordPress вызывает множественный редирект при заходе на главную страницу (другие не проверял — вставил код через FTP и зашёл на главную), будучи авторизованным администратором в последней на данный момент версии WordPress((((9

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

Ваш e-mail не будет опубликован.