301 редирект на PHP

PHP
PHP: 301 редирект на PHP
На одном из сайтов встала задача сделать постоянное перенаправление адресов в которых содержаться заглавные буквы кирилицы, на прописные буквы той же самой кирилицы. На самом деле данный метод можно использовать не только для вышеописанного метода, но и для переадресации на другие домены/каталоги, главное понять суть работы данного кода.

Конечно же, есть много решений сделать 301 редирект в .htaccess, но для вышеописанной проблемы, я решения не нашел, пробовал различные методы, но все увенчались провалом, либо не срабатывал редирект, либо срабатывал, но не правильно переадресовывал, к тому же во втором случае код в .htacces был на пол страницы, безумным.

В итоге пришлось все делать на знакомом и понятном PHP, что оказалось даже очень кстати и все что нужно было написать всего пару строк кода.
<?php
    // Приняли URL и перевели все символы в нижний регистр, при этом указав кодировку, во избежания проблем с кириллицей
    $url = mb_strtolower(urldecode($_SERVER['REQUEST_URI']), 'UTF-8') ;
    // Пишем условие, если в брайзерной строке отличается от урла с нижним регистром, то
    if(urldecode($_SERVER['REQUEST_URI']) != $url) {
        // Выполняем редирект 301
        header('Location: http://'.$_SERVER['HTTP_HOST'].$url, true, 301) ;
    }
?>


Как видно выше, всего три строки, а редирект 301 работает как часы!
Условие
if(urldecode($_SERVER['REQUEST_URI']) != $url) {


служит для сравнения урлов и есть они одинаковые, то редирект не срабатывает, если разные, то срабатывает. Не стоит упускать этот момент из виду, так как это по сути самое главное.

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

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.