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

V
На сайте с 28.01.2020
Offline
25
371

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

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

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





Magazinshik
На сайте с 15.06.2016
Offline
69
#1

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

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

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();
        }
}
Домены/сайты в Google News (/ru/forum/1001331) - мгновенная индексация и трафик
V
На сайте с 28.01.2020
Offline
25
#2

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

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

V
На сайте с 28.01.2020
Offline
25
#3

В ходе эксплуатации редиректа возникла необходимость исключить проверку 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();
        }
}


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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий