WebWost WebWostbeta

Настройка редиректов

Различные способы настройки редиректов.

Al-Sher

Всем привет. В данной записи я хотел бы рассказать про различные методы перенаправления пользователей на другие страницы. Ну а для начала хочу рассказать о том, как это вообще происходит. Для перенаправления сервер передает браузеру специальный http-код, имеющий маску типа 3??, где вместо ? может быть любая цифра. То есть http-коды ответов, начинающиеся с 3, были зарезервированы для перенаправления. Вот их описание:

Наиболее часто встречаемым для меня является редирект 302. Начнем создание данных редиректов! 🙂

Методы html.

В html существует специальный meta-тег, который осуществляет редирект пользователя на другую страницу. Выглядит он следующим образом:

<meta content="0; url=./new.html" http-equiv="refresh"></meta>

В данном коде мы перенаправляем пользователя на страницу ./new.html. Число 0 указывает на время, через которое пользователь будет перемещен на другую страницу. Например, используя код:

<meta content="5; url=./new.html" http-equiv="refresh"></meta>

Пользователь будет перемещен на ./new.html через 5 секунд после загрузки страницы. Данный способ не рекомендован для использования, а так же негативно воспринимается поисковыми системами. Но, если нет другого способа совершить редирект, а он нужен, думаю, это будет хорошей альтернативой. Можно так же обернуть его в noscript, что позволит совершить указанный редирект пользователям без javascript.

Методы javascript.

Используя javascript, мы так же можем совершить перенаправление пользователя на другую страницу. Для этого можно воспользоваться следующим способом:

window.location.href = "./new.html";

То есть редирект осуществляется путем изменения параметра location у объекта window. Если необходимо осуществлять редирект спустя некоторое время, то можно воспользоваться функцией setTimeout и тогда код примет следующий вид:

setTimeout(() => {window.location.href = "./new.html";}, 5000);

В данном случае пользователь будет перемещен на ./new.html через 5 секунд после загрузки сайта. Недостатком данного способа является отсутствие перенаправления пользователей, у которых отключен javascript.

Методы php.

Используя php мы можем передавать браузеру нужный нам http-код. Для этого существует функция header. Пример перенаправления пользователя:

header("Location: ./new.html");

Данный код перенаправит пользователя, используя 302 http-код. Указав в данную функцию дополнительные параметры, мы можем изменить http-код на необходимый нам. Например, осуществим 301 редирект:

header("Location: ./new.html", true, 301);

Если нам необходимо осуществить перемещение пользователя спустя некоторое время, то нам необходим следующий код:

header("Refresh: 5; url=./new.html");

Данный код осуществит перемещение пользователя на страницу ./new.html через 5 секунд после загрузки страницы. Данный способ очень удобен для использования, так как позволяет указывать необходимый нам http-код, а так же помогает поисковикам понять тип редиректа.

Методы nginx.

Мы можем осуществлять редиректы, используя nginx. Данный метод осуществляется в основном для перенаправления пользователей на защищенную версию сайта(https) или наоборот(на http). Используя nginx, мы можем осуществить перенаправление пользователей двумя способами:

Пример использования rewrite:

rewrite /index.html ./new.html;

Если нам необходимо добавить 301 или 302 http-код, то необходимо дописать к коду выше permanent или redirect соответственно. Например, для 301 http-кода запрос будет выглядеть так:

rewrite /index.html ./new.html permanent;

Пример использования return:

return 301 ./new.html;

Как видно, в данном случае мы обязательно указываем http-код. Повторим редирект с /index.html на ./new.html, используя return:

location /index.html {
    return 301 ./new.html;
}

Ну и раз выше я говорил про перенаправление пользователей на защищенную версию сайта(https), то сразу приведу и пример кода:

server {
    listen 80;
    server_name domain.ru;
    return 301 https://domain.ru/$request_uri;
}

Методы apache.

В Apache используется модуль mod_rewrite, отвечающий за перенаправление пользователей. Поэтому перед использованием apache для редиректов, необходимо загрузить модуль:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

А так же разрешить использование данного модуля в .htaccess:

AllowOverride all

В самом файле .htaccess нам необходимо всегда указывать `RewriteEngine On`. Пример использования перенаправления пользователя:

RewriteEngine On
Redirect 301 /index.html ./new.html

Данный код перенаправит пользователя со страницы index.html на страницу new.html с http-кодом 301.

Данный модуль дает возможность использовать специальные правила, указанные в RewriteCond. С помощью данных правил, мы можем осуществлять редирект на безопасную версию сайта. Вот пример кода для такого перенаправления:

RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]

Заключение.

В качестве заключения хочу лишь сказать, что различные методы перенаправления используются в различных случаях. Например, перенаправление на защищенную версию сайта или на поддомен www лучше всего осуществлять с помощью правил nginx или apache. А вот перенаправление пользователей с какой-либо страницы после совершения какого-либо действия удобнее осуществлять с помощью javascript. В случае, когда нет доступа к конфигурации веб-сервера, намного удобнее использовать php или javascript. Meta-теги для перенаправления следует использовать лишь в крайних случаях.

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

Новый комментарий