Перенос сайта: переадресация со старых урл на новые

Опубликовано 644 просмотра
Перенос сайта: переадресация со старых урл на новые

Однажды столкнулся с такой проблемой - какой-то мелкий хостер, у которого располагался старый сайт клиента, попросту не разрешал прописывать в .htaccess редиректы. Без понятия для чего это было сделано, но это его право. Вернувшись в старому доброму PHP, я по-быстрому написал небольшой скрипт, который находит в массиве точное совпадение текущего пути и перекидывает пользователя на новый адрес.

Для начала создадим в корне папки старого сайта файл index.php.

<?php

define('DOMAIN_TO', 'https://gtxtymt.xyz'); // Домен нового сайта с протоколом
define('CODE', 301); // Код ответа сервера

$currentUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); // Текущий URI 
$matches = [
    '/blog' => '/items',
    '/blog/entry1' => '/items/lorem-ipsum'
];

$redirectTo = array_key_exists($currentUri, $matches) ? $mathes[$currentUri] : $_SERVER['REQUEST_URI'];

header('Location: '.DOMAIN_TO.$redirectTo, true, CODE);

Укажем DOMAIN_TO со значением, равным адресу нового сайта с указанием протокола. В CODE находится код ответа сервера, по-умолчанию равный 301 - у страницы новый адрес на постоянной основе.

Заменим или добавим в массив $matches новые адреса, ключи которых равны текущим адресам, например

'/blog/entry2' => '/items/hello-world'

...где /blog/entry2 - старый путь до страницы, /items/hello-world - новый путь. При нахождении совпадений переадресация произойдет на указанный новый адрес, иначе - на сайт с полным исходным URI.

Скрипт будет проверять входящий URI без учета GET-тегов. Для того, чтобы происходила проверка на совпадения всей строки, замените

parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

на

$_SERVER['REQUEST_URI'];

Наконец, если в качестве веб-сервера используется Apache, для корректной работы создайте файл .htaccess:

Options -MultiViews

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]