301 и 302 редирект для посетителя сайта работают одинаково, его перенаправляет на другую страницу или другой URL.
Для веб-сервера и поисковых систем разница есть.
Переадресация определяется сервером при помощи HTTP кода 301 или 302, отдаваемых веб-сервером в ответ на запрос клиента. 302 редирект обычно устанавливается временно, 301 характеризуется как ресурс перемещен навсегда.
301 редирект кэшируется браузером пользователя, а 302 нет. 301 отрабатывает быстрее, что важно для индексации поисковиками.
Для тестирования работы редиректа удобно использовать онлайн сервисы или консольную утилиту curl.
curl -v example.ru
* Rebuilt URL to: example.ru/
Trying 123.123.123.123…
Connected to example.ru (123.123.123.123) port 80 (#0)
> GET / HTTP/1.1
> Host: example.ru
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.6.2
< Date: Thu, 07 Sep 2017 17:09:12 GMT
< Content-Type: text/html; charset=iso-8859-1
< Content-Length: 327
< Connection: keep-alive
< Location: https://example.ru/
curl позволяет избежать кэширования информации браузером. Если проверять работу редиректа через браузер — при редиректе 301 каждый раз раз придется сбрасывать кэш.
В примере выше видно, что на уровне сервера установлен 301 редирект. Он перенаправляет все запросы на версию сайта с https. Для получения подробного вывода добавлен флаг -v (verbose).
Сначала идет запрос по указанному домену, потом сервер возвращает ответ с кодом 301. Идет новый запрос уже по адресу, на который настроена переадресация и о котором сообщил сервер.
Схема по которой видно чем различаются 301 и 302 редирект
301 http:
302 http:
Также редиректы часто используются для переадресации с версии ресурса с www на версию без www и для переадресации всех запросов с одного домена на другой.
Редирект можно настроить в Nginx , в конфигурационном файле Apache или через файл .htaccess в корне сайта.
При настройке на сервере удобно сначала устанавливать редирект 302. Затем, когда проверено, что он отрабатывает так как нужно заменять его на 301.
Переадресация с кодом 301 устанавливается если меняется адрес, по которому доступна какая-то страница сайта.
Если весь сайт переносится на другой домен также всегда используют постоянный редирект.
Смотрите также пример настройки редиректа в .htaccess