How to set up a redirect in PHP & JS & .htaccess

Last update: 22 Квітня, 2023

Category: Redirect, WordPress

Содержание

  1. Коды ошибок
  2. Синтаксис и примеры при использовании php
  3. Синтаксис и примеры при использовании js
  4. Синтаксис и примеры при использовании .htaccess

Коды ошибок

3xx: Redirection (перенаправление):

  • 300 Multiple Choices («множество выборов»);
  • 301 Moved Permanently («перемещено навсегда»);
  • 302 Moved Temporarily («перемещено временно»);
  • 302 Found («найдено»);
  • 303 See Other («смотреть другое»);
  • 304 Not Modified («не изменялось»);
  • 305 Use Proxy («использовать прокси»);
  • 306 — зарезервировано (код использовался только в ранних спецификациях);
  • 307 Temporary Redirect («временное перенаправление»);
  • 308 Permanent Redirect («постоянное перенаправление»).

Синтаксис и примеры при использовании php

Безусловная переадресация на PHP

<?php header( 'Location: http://site.ru/', true, 307 ); ?>

Переадресация PHP для пользователя с определенным IP-адресом

  1. Условие IF.
  2. Обращение к серверу для получения текущего IP-адреса пользователя (SERVER REMOTE ADDR).
  3. Сравнение полученного значения с значением, заданным нами.
  4. Временный (307) редирект в том случае, если значения не совпали (“!==”) или напротив совпали (“==”).

Использование:

  • Простой вариант режима обслуживания (maintenance mode), при котором Вы будете продолжать получать доступ к странице, в то время как другие пользователи будут перенаправлены на другую информацию.
  • Простой вариант защиты от человека, который решил засыпать Вас спамом или прописать инъекцию  и действует с небольшого количества IP-адресов.
<?php
if ( $_SERVER['REMOTE_ADDR'] !== '192.168.0.0' ) {
    header( 'Location: http://site.ru/', true, 307 );
}
?>

Синтаксис и примеры при использовании js

Безусловная переадрасация на JS

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

Переадресация на SSL на JS

JS: проверка на каком протоколе загрузилась страница и редирект на ssl

<script type="text/javascript">
if (location.protocol !== "https:") {
  location.protocol = "https:";
}
</script>

Переадресация на JS в зависимости от ширины экрана

Если ширина меньше 900px переходим на мобильную версию:

<script language="JavaScript" type="text/javascript"> 
if(screen.width < 900) document.location = 'https://sapid.info/mobile/';
</script>

Если ширина больше или равна 900px переходим на основную версию:

<script language="JavaScript" type="text/javascript"> 
if(screen.width >= 900) document.location = 'https://sapid.info/';
</script>

Синтаксис и примеры при использовании .htaccess

Пример редиректа на HTTPS (SSL) в WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Подмена ссылок на файлы с ошибками

Еще вариант настроить переадресацию с несуществующих страниц сайта ( и при других ошибках ) – переопределить страницу сообщения об ошибке.

Важно помнить, что если писать относительный адрес, а не как в примере ниже – то система будет искать файлы в корне сервера, а (вероятно) они лежат не в корневой папке сервера:

ErrorDocument 400 https://site.domain/error.php?err=400
ErrorDocument 401 https://site.domain/error.php?err=401
ErrorDocument 402 https://site.domain/error.php?err=402
ErrorDocument 403 https://site.domain/error.php?err=403
ErrorDocument 404 https://site.domain/error.php?err=404
ErrorDocument 500 https://site.domain/error.php?err=500
ErrorDocument 502 https://site.domain/error.php?err=502

Редирект “перемещено навсегда” с сохранением URL

RewriteEngine On
# 123.com - старый домен, 123.ru - новый, не забудьте заменить на свои значения
RewriteCond %{HTTP_HOST} ^123.com [NC]
RewriteRule ^(.*)$ http://123.ru/$1 [L,R=301]

Редирект с http на https (ssl)

На php, должен работать на Apache и IIS:

if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
    $location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $location);
    exit;
}

Для htaccess (без сms):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Для htaccess (сms WordPress):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END WordPress