How to set up a redirect in PHP & JS & .htaccess
Содержание
- Коды ошибок
- Синтаксис и примеры при использовании php
- Синтаксис и примеры при использовании js
- Синтаксис и примеры при использовании .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-адресом
- Условие IF.
- Обращение к серверу для получения текущего IP-адреса пользователя (SERVER REMOTE ADDR).
- Сравнение полученного значения с значением, заданным нами.
- Временный (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