Как сделать постоянное перенаправление с кодом 301 на веб-сервере Nginx?

Задача: Изменился URL у страницы и требуется сделать постоянное перенаправление на новую страницу.

Чтобы не мудрить, предлагаю для этой цели использовать простую директиву return.

Обратимся к документации и взглянем на информацию об этой директиве, которую мы будем использовать для постоянного перенаправления.

Syntax: return code [text]; return code URL; return URL; Context: server, location, if

https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

Нам подойдёт для решения поставленной задачи контекст location и синтаксис return code URL;

Открываем конфигурационный файл HTTP-сервера Nginx и добавляем в него

#
# Redirect
#
location /old-page/ {
	return 301 /new-page/;
}

/old-page/ будет перенаправлять и без последнего слеша. Если требуется задать строгое сравнение, то с помощью модификатора “=” можно задать точное совпадение URI

#
# Redirect с точным соответствием символов в URI
#
location = /old-page {
	return 301 /new-page-2/;
}

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

#
# Redirect
#
location /old-page/ {
	return 301 $scheme://new-site.ru/about;
}

А вот простой пример постоянного перенаправления (со статусом 301) всех посетителей на новое доменное имя, но только уже в контексте server

server {
    listen 80;
    listen 443 ssl;
    server_name old-site.ru;
    return 301 $scheme://new-site.ru$request_uri;
}

Важно понимать, что в указании $request_uri есть смысл только тогда, когда у вас на сайте в адресах после домена происходит полное соответствие, то есть old-site.ru/contact == new-site.ru/contact

Как сделать постоянное перенаправление с кодом 301 на веб-сервере Apache?

Если вы изменили адрес страницы на новый, то хорошей практикой является сделать на неё постоянное перенаправление, например, для того, чтобы не потерять переходы пользователей из поисковых систем.

Настройку мы будем делать через специальный файл .htaccess – файл дополнительной конфигурации HTTP-сервера Apache.

В качестве примера возьмём сайт на WordPress. Стоит задача сделать внутреннее перенаправление с адреса /old-page/ на /new-page/

  1. В корне сайта необходимо создать файл .htaccess
файл .htaccess
  1. Добавьте перенаправление используя Директиву Redirect
# Перенаправление на том же хосте
Redirect 301 "/old-page/" "/new-page/"

Если вы окрыли файл .htaccess и видите уже в неё какие-то записи, то рекомендуется вносить с комментарием и в самый конец файла. В нашем примере, при открытии файла, мы можем наблюдать правила URL для красивых ссылок (ЧПУ) которые прописал сам WordPress. Мы просто в конец файла, с комментарием, добавляем новое правило перенаправления.

добавляем новое правило

Что произойдёт? Теперь при посещении страницы с адресом codeispoetry.ru/old-page/ пользователь будет мгновенно перенаправлен на codeispoetry.ru/new-page/

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

# Перенаправление на другой хост
Redirect 301 "/about" "http://eng.example.com/about"

Официальная документация