Как сделать редирект URL-адреса

Хотите перенаправить URL-адрес из одного места в другое? В этом простом руководстве мы покажем, как можно это сделать с помощью Apache / .htaccess, PHP, JavaScript, HTML и т. д. Каждый метод редиректа HTML мы кратко поясним и продемонстрируем готовые к использованию примеры.

Редирект URL-адресов с помощью PHP

Редирект с помощью PHP выполняется с помощью функции header(), например:

<?php 
	header('location: http://example.com/');
	exit;
?>

Эта функция должна быть вызвана в начале веб-страницы до вывода HTML-кода. Чтобы узнать больше о настройке этого метода, ознакомьтесь с документацией PHP.

Чтобы выполнить редирект с помощью PHP через определенное время:

<?php
	header('Refresh:5; URL=http://example.com/');
	exit;
?>

Редирект на example.com выполняется через 5 секунд. Вы можете изменить это значение на необходимое.

Редирект URL-адресов с помощью JavaScript

Вот самый простой способ index html редиректа с помощью JavaScript:

<script type="text/javascript">
	document.location.href = 'http://example.com/';
</script>

Редирект URL-адресов с помощью HTML

Можно перенаправить пользователя на новый URL-адрес, используя старый добрый HTML. Вот пример:

<meta http-equiv="refresh" content="10; url=http://example.com/" />

Это называется meta-refresh редирект. Можно задать время (в секундах), изменив 10 на необходимое число. Обратите внимание, что этим методом редиректа часто злоупотребляют спамеры. Поэтому будьте осторожны, если вы реализуете его на общедоступном сайте.

В таких случаях рекомендуется задать интервал редиректа более 8 секунд, чтобы предотвратить любые возможные наказания от поисковых систем.

Редирект URL-адресов с помощью Perl

Вот два способа редиректа URL-адресов с помощью Perl:

#!/usr/bin/perl
print "Location: http://example.comnn";
exit;

Редирект URL-адресов с помощью ASP (VB Script)

Чтобы перенаправить URL-адрес с помощью ASP, добавьте следующий код:

<%@ Language=VBScript %>
<% response.status="301 moved permanently" Response.AddHeader "Location", "http://example.com" %>

Редирект URL-адресов с помощью mod_alias Apache

Самый простой способ перенаправления на серверах Apache:

Redirect 301 /old-location.html http://example.com/new-location/

Перед тем, как сделать редирект HTML, этот код нужно добавить в файл .htaccess или файл конфигурации сервера Apache. Вот синтаксис этого метода:

[Директива] [Код состояния] [Старый URL] [Новый URL]

При необходимости можно изменить любой из этих параметров. Например, если нужно подставлять старый URL-адрес динамически, чтобы перенаправить все следующие URL-адреса:

http://example.com/old-directory/file-01.html
http://example.com/old-directory/file-02.html
http://example.com/old-directory/file-03.html
.
.
.

Можно использовать RedirectMatch вместо Redirect:

RedirectMatch 301 /old-directory/file-(.*).html http://example.com/new-directory/file-$1.html

Также можно изменить код статуса с 301 (постоянный редирект) на 302 (временный редирект). Или на любой другой действительный код состояния. Ниже приведено руководство по регулярным выражениям, используемым в методе RedirectMatch:

  • (.*) — соответствует любому символу (или отсутствию символа);
  • . — буквально соответствует точке;
  • $1 — возвращает шаблон, сопоставляемый первым (.*).

Редирект URL-адресов с помощью mod_rewrite Apache

Более функциональный способ редиректа с помощью Apache — использовать его переписывающий модуль mod_rewrite. Вот несколько примеров, которые можно добавить в .htaccess или в файл конфигурации Apache.

Пример 1: Редирект с www на без www

Этот код редиректа HTML перенаправляет все www-версии URL-адресов на их эквивалентные версии без www.

<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
	RewriteRule (.*) http://example.com/$1 [R=301,L]
</IfModule>

Это называется канонизацией. Вот несколько примечаний о регулярном выражении, используемом в этом примере:

  • ^ — обозначает начало запрошенного URI;
  • . — буквально соответствует точке;
  • $ — обозначает конец запрошенного URI;
  • [NC] — делает шаблон нечувствительным к регистру;
  • (.*) — соответствует любому символу (или отсутствию символов);
  • $1 — соответствует шаблону из круглых скобок (.*) в RewriteRule;
  • [R=301,L] — отправляет код состояния 301 и инструктирует Apache прекратить обработку набора правил.

Пример 2: Редирект всего домена

Чтобы осуществить редирект HTML с текущего домена на новый:

<IfModule mod_rewrite.c>
	RewriteRule ^/(.*) https://new-domain.tld/$1 [R=301,L]
</IfModule>

Аналогично можно перенаправить запросы из поддомена текущего сайта на поддомен на новом сайте:

<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_HOST} (.*).old-domain.tld [NC]
	RewriteRule ^/(.*) https://%1.new-domain.tld/$1 [R=301,L]
</IfModule>

Вот несколько примечаний о регулярном выражении, используемом в этом примере:

  • ^ — обозначает начало запрошенного URI;
  • (.*) — соответствует любому символу (или отсутствию символов);
  • $1 — соответствует шаблону из круглых скобок (.*) в RewriteRule;
  • %1 — соответствует первому шаблону из круглых скобок (.*) в RewriteCond
  • [R=301,L] — отправляет код состояния 301 и инструктирует Apache прекратить обработку набора правил.

Обратите внимание: чтобы любой из этих методов работал корректно, оба домена должны иметь одинаковую структуру файлов. Папки и ресурсы на текущем домене также должны существовать и на новом домене. В противном случае вы получите на новом домене кучу ошибок 404.

Пример 3: Перенаправление всех файлов HTML и PHP

Вот еще один, более сложный пример скрипта редиректа HTML mod_rewrite:

<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} ^/old-directory/(.*).(html|php)$ [NC]
	RewriteRule (.*) http://example.com/new-directory/%1.%2 [R=301,L]
</IfModule>

Мы перенаправляем все запросы к любым файлам HTML или PHP, расположенным в папке /old-directory/. Все соответствующие запросы перенаправляются в тот же файл, который находится в /new-directory/. Вот несколько примечаний о регулярном выражении, используемом в этом примере:

  • ^ — обозначает начало запрошенного URI;
  • (.*) — соответствует любому символу (или отсутствию символов);
  • . — буквально соответствует точке;
  • (html php) — соответствует либо html, либо php;
  • [NC] — делает шаблон нечувствительным к регистру;
  • %1 — соответствует первому шаблону из круглых скобок (. *) в RewriteCond;
  • %2 — соответствует второму шаблону из круглых скобок (html|php) в RewriteCond;
  • [R=301,L] — отправляет код состояния 301 и инструктирует Apache прекратить обработку набора правил.

Редирект ошибки 404 с помощью Apache

Вот удобный код редиректа html HTML всех ошибок 404 «Not Found» на определенный URL.

ErrorDocument 404 http://example.com/wherever/

Просто измените URL-адрес на нужный и добавьте код в файл .htaccess в корневой папке вашего сайта или добавьте его в файл конфигурации Apache.

Перевод статьи «How to Redirect URLs» дружной командой проекта Сайтостроение от А до Я.