(PHP) Редирект URL в нижний регистр кроме страниц c расширением


Vaily
119

Сейчас стоит редирект для всех страниц в Верхнем регистре на нижний регистр:

if ( $_SERVER['REQUEST_URI'] != strtolower( $_SERVER['REQUEST_URI']) ) {
    header('Location: //'.$_SERVER['HTTP_HOST'] . strtolower($_SERVER['REQUEST_URI']), true, 301);
    exit();
}

Нужно исключить редирект в нижний регистр для страниц с расширениями (например: html, docx, pdf и т.д.)
То есть, дополнить условие исключением для страниц с  любым расширением.


Magazinshik

Если не ошибаюсь, то будет так.

Для списка известных расширений:

if ( $_SERVER['REQUEST_URI'] != strtolower( $_SERVER['REQUEST_URI']) ) {
        if (!preg_match("/.(pdf|doc|docx|xls|xlsx)$/i", $_SERVER['REQUEST_URI']))      {
                header('Location: //'.$_SERVER['HTTP_HOST'] . strtolower($_SERVER['REQUEST_URI']), true, 301);
                exit();
        }
}

Для всех случаев, когда появляется точка и после идёт 2-4 знака и конец строки:

if ( $_SERVER['REQUEST_URI'] != strtolower( $_SERVER['REQUEST_URI']) ) {
        if (!preg_match("/.[a-z0-9]{2,4}$/i", $_SERVER['REQUEST_URI']))        {
                header('Location: //'.$_SERVER['HTTP_HOST'] . strtolower($_SERVER['REQUEST_URI']), true, 301);
                exit();
        }
}


Vaily

То, что надо. Оба варианта.

Magazinshik, низкий Вам поклон добрый человек!


Vaily

В ходе эксплуатации редиректа возникла необходимость исключить проверку GET-параметров.
Получилось так:

$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
if ( $uri_parts[0] != strtolower( $uri_parts[0]) ) {
        if (!preg_match("/.(pdf|doc|docx|xls|xlsx)$/i", $uri_parts[0]))      {
                header('Location: //'.$_SERVER['HTTP_HOST'] . strtolower($uri_parts[0]), true, 301);
                exit();
        }
}

и соответственно:

$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
if ( $uri_parts != strtolower( $uri_parts) ) {
        if (!preg_match("/.[a-z0-9]{2,4}$/i", $uri_parts))        {
                header('Location: //'.$_SERVER['HTTP_HOST'] . strtolower($uri_parts), true, 301);
                exit();
        }
}

Может быть кому-то пригодится.

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

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