Содержание:
Типы кодов редиректов и их цель.
Почему большинство используют 301 редирект.
Редирект 301 для всех страниц с http на https с помощью .htaccess
Для остальных редирект кодов.
Редирект 301 с https:// на http:// через .htaccess
Для остальных редирект кодов.
Редирект на https только выбранной страницы, через .htaccess.
Редирект на https всех страниц, кроме одной, через .htaccess.
Редирект 301 с www на без www через .htaccess.
Редирект 301 с без www на c www, через .htaccess.
Редирект 301 со страниц со слешем на без слеша для всего сайта, через .htaccess.
Редирект 301 со страниц без слеша на слеш для всего сайта, через .htaccess.
Редирект с разных версий языка сайта на одну версию (например, с en.example.com на example.com).
Редирект со страницы «ошибка 404».
Редирект 301 с одного домена на другой, через .htaccess
Редирект с index.php и index.html на главную, через .htaccess
Редиректы играют важную роль в веб-разработке и оптимизации сайтов. Они позволяют автоматически перенаправлять пользователя с одной страницы на другую. В этой статье мы обсудим различные типы редиректов и объясним, когда и зачем они нужны.
Когда использовать редиректы?
1. Перемещение сайта на новый домен или поддомен: если вы меняете доменное имя своего сайта или создаете поддомен, редиректы позволят перенаправить посетителей с предыдущего адреса на новый адрес.
2. Изменение структуры URL: если вы меняете структуру URL на своем сайте, редиректы помогут перенаправить посетителей с предыдущих URL на новые URL, чтобы они не столкнулись с ошибкой «404 — Страница не найдена».
3. Указание предпочтительной версии сайта: если у вас есть сайт с www и без www в адресе, вы можете настроить редирект для того, чтобы все пользователи автоматически перенаправлялись на предпочтительную версию (например, с example.com на www.example.com или наоборот).
4. Изменение названия страницы или перемещение контента: если вы переименовываете страницу или перемещаете ее контент, редиректы помогут сохранить ссылки и поисковый трафик, перенаправляя посетителей с предыдущей ссылки на новую.
Кроме того, редиректы используются в многих других случаях, включая установку отчетности аналитики, обработку ошибок, управление сеансами и др.
Типы кодов редиректов и их цель
300 «Множество вариантов» используется, когда клиентский запрос может быть выполнен несколькими способами и сервер предоставляет список этих вариантов. Например, если вы запрашиваете веб-страницу и она может быть отображена в разных форматах, сервер может вернуть код 300 и список этих форматов, чтобы вы могли выбрать то, что вам подходит.
301 «Перемещено навсегда» используется, когда страница была перемещена на новое место окончательно. Этот тип редиректа является наиболее часто используемым и приказывает поисковым системам обновить свой индекс с новой страницей. Например, если вы сохраняли закладку для веб-страницы, но она была перемещена на другой домен или поддомен, сервер отправит код 301 и новый адрес, чтобы вы могли обновить свою закладку.
302 «Перемещено временно» используется, когда страница временно перемещена на другое место. Иногда он используется для технических целей или во время обслуживания сайта. Поисковые системы могут оставить исходную страницу в индексе. Например, веб-страница может быть временно доступна по другому адресу из-за технических причин. Код 302 и временный адрес помогут вам получить доступ к этой странице.
303 «Смотреть другое» используется для перенаправления пользователей на другую страницу без указания на то, что исходная страница перемещена. Этот тип редиректа редко используется и может быть использован для временного перенаправления или предложения альтернативных продуктов. Например, если вы отправили форму на веб-странице, сервер может вернуть код 303 и адрес другой страницы, на которую вам нужно будет перейти для просмотра результатов.
304 «Не изменено» используется, когда страница не была изменена с последнего посещения. Он указывает браузеру использовать закэшированную версию страницы, что помогает сэкономить пропускную способность и ресурсы сервера.
305 «Использовать прокси» используется для указания браузеру доступа к запрашиваемому ресурсу через прокси-сервер для обеспечения анонимности или сжатия данных. Этот тип редиректа редко используется.
306 является зарезервированным кодом состояния и не используется.
307 «Временное перенаправление» похож на 302, но разработан для использования в HTTP 1.1. Он позволяет более точно обрабатывать перенаправления POST-запросов и не поддерживается всеми браузерами.
308 «Постоянное перенаправление» похож на 301, но сохраняет исходный метод запроса, такой как POST. Он используется для постоянных перенаправлений без изменения метода запроса.
Почему большинство используют 301 редирект
Использование 301 редиректа является эффективным, потому что он сохраняет рейтинг и авторитет старой страницы, обеспечивает плавный переход для пользователей и информирует поисковые системы о перемещении страницы. Однако при временной недоступности страницы можно использовать и другие типы временных перенаправлений, такие как 302 редирект, чтобы указать поисковым системам, что страница будет восстановлена в ближайшем будущем.
Редирект 301 для всех страниц с http на https с помощью .htaccess
Вариант 1
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Вариант 2
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Если второй вариант не сработал и появляется циклическая переадресация:
Вариант 3
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вариант 4
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Для остальных редирект кодов
Для перенаправления всех страниц с HTTP на HTTPS, включая перенаправление с HTTP://www на HTTPS://, можно использовать следующие редиректы:
Редирект 302 (временное перенаправление):
Это перенаправление будет кэшироваться браузерами и другими приложениями, следовательно, они будут использовать HTTPS для всех последующих запросов к этому сайту.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
Редирект 303 (см. другое):
Это перенаправление считается временным и не будет кэшироваться, поэтому HTTPS будет использоваться только для текущего запроса.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=303,L]
Редирект 307 (временное перенаправление):
Это перенаправление указывает браузеру сделать GET-запрос к новой странице. Обычно используется после успешной обработки POST-запроса.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=307,L]
Редирект 308 (постоянное перенаправление):
Аналогично предыдущему временному перенаправлению, но сохраняет тип запроса (например, POST или PUT). Редирект 308 аналогичен постоянному редиректу 301.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=308,L]
Редирект 301 с https:// на http:// через .htaccess
Вариант 1
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} 1 [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Вариант 2
RewriteEngine On
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://name.site/$1 [R=301,L]
Для остальных редирект кодов
В большинстве случаев вы будете использовать код 301 для постоянного перенаправления, однако если вам нужно использовать другой код, вы можете внести соответствующие изменения в коде выше. Например, если вы хотите использовать код 302, замените [R=301] на [R=302]. Примеры использования других редиректов:
Редирект 300
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=300,L]
Редирект 302
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
Редирект 303
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=303,L]
Редирект 304
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=304,L]
Редирект 305
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=305,L]
Редирект 306
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=306,L]
Редирект 307
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=307,L]
Редирект 308
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=308,L]
Редирект на https только выбранной страницы, через .htaccess
Вариант 1
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} =/admin.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Вариант 2
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} =/admin.php
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Редирект на https всех страниц, кроме одной, через .htaccess
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^/test.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Редирект 301 с www на без www через .htaccess
Вариант 1
RewriteEngine On
RewriteCond %{HTTP_HOST} ^poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://www.poddomen.domain.ru/$1 [R=301,L]
Вариант 2
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Редирект 301 c без www на с www, через .htaccess
Вариант 1
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://poddomen.domain.ru/$1 [R=301,L]
Вариант 2
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://poddomen.domain.ru/$1 [R=301,L]
Редирект 301 со страниц со слешем на без слеша для всего сайта, через .htaccess
Вариант 1
RewriteEngine on
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^/]$
RewriteRule ^(.*)/$ /$1 [R=301,L]
Вариант 2
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
Редирект 301 со страниц без слеша на слеш для всего сайта, через .htaccess
Вариант 1
RewriteEngine on
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
Вариант 2
RewriteEngine on
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
Редирект с разных версий языка сайта на одну версию (например, с en.example.com на example.com)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^en.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Редирект с несуществующих страниц «ошибка 404»
Откройте конфигурационный файл .htaccess и добавьте в него строку:
<pre>
<code>
ErrorDocument 404 http://www.site.com/404.html
</code>
</pre>
Где www.site.com — адрес вашего сайта, а 404.html — страница, на которую будет вести редирект с несуществующих страниц. Эту страницу необходимо создать самостоятельно.
Редирект 301 с одного домена на другой, через .htaccess
Откройте конфигурационный файл .htaccess и добавьте в него строку:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^старый_сайт.ru
RewriteRule (.*) http://новый_сайт.ru/$1 [R=301,L]
Редирект с index.php и index.html на главную, через .htaccess
Редирект для index.php
Откройте конфигурационный файл .htaccess и добавьте в него строку:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://name.site/ [R=301,L]
Редирект для index.html
Откройте конфигурационный файл .htaccess и добавьте в него строку:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ https://site.ru/ [R=301,L]