В данной статье мы рассмотрим, какие редиректы и как можно сделать при помощи .htaccess
Данная инструкция актуальна для веб-серверов, работающих с Apache (на всех наших услугах хостинга они будут работать безотказно). Чтобы правила начали работать, создайте или откройте файл .htaccess, расположенный в корневой папке Вашего сайта.
Редирект с HTTP на HTTPS
После добавления одного из правил Вам необходимо сохранить данный файл и Ваш редирект будет работать корректно.
Первый вариант
RewriteEngine On
# Варианты условий, раскомментируйте (удалите # в начале строк) у того варианта, который Вам подходит. Не подходящий же вариант нужно закомментировать (добавить # в начале строки)
# Вариант 1
RewriteCond %{ENV:HTTPS} !on
# Вариант 2
#RewriteCond %{HTTP:X-Forwarded-Proto} !https
# Вариант 3
#RewriteCond %{HTTP:X-Forwarded-Port} !443
# Вариант 4 (на хостинге HostiMan он не работает, но может работать на VDS и иных окружениях).
#RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteEngine On
# Варианты условий, раскомментируйте (удалите # в начале строк) у того варианта, который Вам подходит. Не подходящий же вариант нужно закомментировать (добавить # в начале строки)
# Вариант 1
RewriteCond %{ENV:HTTPS} =on
# Вариант 2
#RewriteCond %{HTTP:X-Forwarded-Proto} =https
# Вариант 3 (на хостинге HostiMan он не работает, но может работать на VDS и иных окружениях).
#RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Убираем www из адреса сайта или переносим сайт с одного домена на другой
Если Ваш сайт доступен по адресам www.site.ru и site.ru, Вы можете избавиться от первого варианта, но при этом сайт будет доступен по обоим адресам. Для этого используйте правило:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
И тогда у Вас будет произведен 301 редирект с www на сайт без www. Если сайт работает по протоколу https, то вместо http напишите https.
Аналогичным образом можно сделать переадресацию с одного домена на другой: вместо www.site.ru укажите старый домен, а вместо site.ru - новый. Например:
RewriteEngine On
RewriteCond %{HTTP_HOST} old-site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Тогда все запросы на old-site.ru (включая все его поддомены) будут переадресованы на site.ru
Добавляем www к адресу сайта
Аналогичная ситуация с предыдущей, только немного наоборот
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]
Удаляем лишний слэш / из адресной строки
Например, вместо site.ru/catalog/, будет site.ru/catalog
RewriteEngine On
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
Редирект на новую страницу
Настройте перенаправление со старой страницы /old_index.php на новую /new_index.php
Redirect 301 /index.php http://yoursite.ru/index.php
Более сложные примеры правил редиректов при помощи .htaccess
RedirectMatch [status] URL-regexp URL-to-redirect
[status] - код перенаправления (30x),
URL-regexp - информация о перенаправляемом ресурсе, в том числе, с использованием регулярных выражений
URL-to-redirect - адрес перенаправления
Пример 1. Переадресация всего сайта с сохранением строки запроса
Redirect / http://yandex.ru/yandsearch?text=
Выполнится 302 редирект (по умолчанию) на поиск в Яндексе символов, введенных в адресную строку после названия Вашего сайта.
То есть если посетитель введет http://site.ru/page, то браузер его перенаправит на http://yandex.ru/yandsearch?text=page
Пример 2. Переадресация конкретной страницы
Redirect 301 /hello.html http://google.ru/search?q=bye
В случае перехода на страницу http://site.ru/hello.html выполнится 301 редирект на поиск в Гугле фразы "bye".
Пример 3. Переадресация конкретных файлов.
Примечание: данный редирект может не работать на серверах с nginx, если используются расширения статических файлов.
RedirectMatch (.*)\.jpg$ http://хостинг_для_картинок$1.jpg
"Временно" (по умолчанию действует 302 редирект) переадресовываем все запросы jpeg-картинок на какой-либо бесплатный хостинг
Аналогичный код, но при помощи RewriteRule
RewriteEngine on
RewriteRule (.*)\.jpg$ http://хостинг_для_картинок$1.jpg [L,R]
Пример 4. Передресация URL, в которых содержится QUERY STRING
Если у Вас имеется страница https://site.ru/page.php?page=hello&id=5 и нужно сделать её редирект, то при помощи .htaccess нужно составить сложные правила, которые позволят выполнить поставленную задачу.
RewriteCond %{REQUEST_FILENAME} page\.php$
RewriteCond %{QUERY_STRING} ^page=hello&id=5$
RewriteRule ^page\.php$ https://site.ru/redirect_to? [R=301,L]
В первой строке мы указываем, что правило будет распространятся только на запрос файла page.php
Во второй строке указываем строку запроса (query string), при наличии которой выполнится правило RewriteRule.
Когда 2 указанных RewriteCond совпадут, сработает RewriteRule, в котором указан редирект страницы page.php на URL https://site.ru/redirect_to? с кодом 301
Знак "?" в конце URL указан для того, чтобы строка запроса не передавалась на URL редиректа. Если передача необходима, то следует удалить знак "?" из URL.
Если у Вас возникнут трудности с настройкой данной редиректа обратиться в техническую поддержку нашего хостинга и наши сотрудники с радостью помогут Вам.