Redirect
301 редирект — лучший метод сохранения позиций в поисковых системах, если изменяется URL страницы или домен сайта.
Код 301 означает "перемещен навсегда" ("moved permanently").
- https://httpstatus.io/ — Bulk URL HTTP Status Code, Header & Redirect Checker
- https://wheregoes.com/ — URL Redirect Checker
Редактируется в конфигах под админом: WWW-домены — выбрать домен — кнопка Конфиг.
См. также:
- Как настраивать редиректы на веб-сервере NGINX
- Как настроить 301 редирект (redirect) при помощи Nginx на VPS | REG.RU
Настроим редирект с domain.org.ua на domain.com
server {
...
if ($host ~* domain\.org\.ua(.*)) {
rewrite ^ https://domain.com$request_uri? permanent;
}
location / {
...
Т.к. в начале мы делаем средствами ISPmanager редирект с http на https, то остальные редиректы нужно прописывать во второй секции конфигурационного файла Nginx server {..., в которой упоминаются ssl_certificate.
server {
#...
if ($host ~* www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ https://$host_without_www$1 permanent;
}
location / {
...
}
server {
#...
rewrite ^/(.*)/$ /$1 permanent;
#...
}
#...
location / {
if ( $request_uri ~ "/index.html" ) {
rewrite ^/(.*)/ /$1 permanent;
}
}
location /index.html {
if ($request_uri = /index.html) {
rewrite ^ $scheme://$host? permanent;
}
}
#...
server {
#...
rewrite ^(.*)\.shtml$ $1.html permanent;
#...
#...
location / {
if ($request_uri ~ ^/(.*)\.html) {
return 301 /$1;
}
try_files $uri $uri.html $uri/ =404;
}
#...
Прод: в ISPmanager залогиниться под клиента и в узле WWW-домен поставить "Перенаправлять HTTP-запросы в HTTPS".
Бета/dev (нужно, чтобы работали почтовые формы https://api.zina.com.ua/send_form):
в файле etc\nginx\sites\имя.домена.conf добавить:
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
после сохранения выполнить:
service nginx reload
В .htaccess
RewriteRule ^(.*)/$ /$1 [L,R=301]
Он есть в стандартном .htaccess Drupal. Найдите в этом файле строку RewriteEngine on и ниже нее раскомментируйте блок:
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteEngine On
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
В nginx — редактируется в ISPmanager под админом: WWW-домены — выбрать домен — кнопка Конфиг, добавить в секцию server:
server {
...
if ($host ~* www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
...
Подробнее: Как настроить 301 редирект (redirect) при помощи Nginx на VPS | REG.RU
1. Самое простое — редирект с одной страницы на другую: в .htaccess пишем:
Redirect 301 /old-file.html http://myserver.com/new-file.html
2. Более сложный вариант, когда сайт переносится, скажем, с одного домена на другой, и при этом сохраняется структура УРЛов:
RewriteEngine ON RewriteRule ^(.*)$ http://mynewdomain.com/$1 [R=301,L]
Таким образом, если кто-то запрашивает страницу http://domain.com/asdf.html, его будет редиректить (301) на http://mynewdomain.com/asdf.html
3. Если же сайт, к примеру, переносится, а структура УРЛов меняется, то есть смысл использовать следующий метод:
RewriteEngine ON RewriteRule /.* http://mynewdomain.com/ [R=301,L]
При этом все запросы со старого домена будут вести на главную страницу нового.
4. Еще один интересный момент, если вы хотите изменить разрешение файлов (например, с html на htm):
RedirectMatch 301 (.*)\.htm$ http://сайт.com$1.html
Пример редиректа:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.powerbody.ru$ [NC]
RewriteRule ^(.*)$ http://сайт.ru/$1 [R=301]
RewriteRule ^(index.php)$ http://сайт.ru/ [R=301,L]
преобразует www в без www и index.php в /
Redirect 301 / http://www.you.com/new.htm
где:
- Redirect 301 - это инструкция, говорящая что страница перемещена
- / - означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано
- http://www.you.com/new.htm - новая страница или сайт (не забывайте поставить последний "/", если переадресация идет на сайт).
Чтобы переадресовать только страницу, сохранив PR старой страницы:
Redirect 301 /old/old.htm http://www.you.com/new.htm
где:
- /old/old.htm - путь и имя старой страницы
Аналогичный синтаксис для переадресации сайта:
RedirectPermanent / http://www.you.com/
Пример переадресации каталога:
RedirectPermanent /old-directory http://www.domain.com/new-directory/
Например, зашедших в test переадресуем на www.test.com, остальных на enter.test.com (порядок следования записей важен):
Redirect permanent /test http://www.test.com/ Redirect permanent / http://enter.test.com/
Примечание: для моих целей (изменение домена) хватило первого варианта простого 301 редиректа.
Ставшая классической задача слияния имена сайта с www и без него, решается так:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursite\.com
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L] .
или альтернативный синтаксис:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Обозначение [R=301,L] означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).
Редирект старого домена на новый:
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
Например, если необходимо чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в .htaccess:
RewriteEngine on RewriteBase / RewriteRule ^rewrite\.htm$ rewrite.html [R=permanent]
Для замены всех .htm файлов .html файлами:
RewriteEngine on RewriteBase / RewriteRule ^(.*)\.htm$ $1.html [R=permanent]
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.newdomain.ru/newdir/newpage.htm");
exit();
?>
Лучше указать HTTP/1.1, так как более старые не поддерживают виртуальный хостинг. Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:
<?
$ref=$_SERVER['QUERY_STRING'];
if ($ref!=) $ref='?'.$ref;
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://newdomain.com/'.$ref);
exit();
?>