.htaccess

Флаги:

  • QSA - добавление существующей строки запроса после того, как URI был переписан
  • L - Last, если сработало, обработка файла htaccess заканчивается
  • NC - nocase, любой регистр, .jpg .JPG будут отрабатывать как одно и то же
  • OR - или, если не указано ничего, по-умолчанию используется И
  • F - Запрещено, отправляет пользователю заголовок 403

RewriteRule

(требуется включенный FollowSymLinks : Options +FollowSymLinks)
Редирект c поддомена www на обычный

RewriteCond %{HTTP_HOST} ^www.site.ru
RewriteRule (.*) http://site.ru.ru/$1 [R=301,L]

Редирект с www любого хоста на без www не переопределяя хост

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Редирект на другую страницу, тут на поддомен www

RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^site.ru.ru$ 
RewriteRule (.*) http://www.site.ru.ru%{REQUEST_URI} [R=301,L]

Редирект на https без переопределения хоста

RewriteCond %{SERVER_PORT} !443
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

Красивый редирект на https

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

Другой редирект на https на поддомен www

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.site\.ru [NC]
RewriteRule (.*) https://www.site.ru/$1 [R=301,L]

Другой редирект на https, с исключением админки

RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^/admin/(.*)$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Другой редирект на https (часто работает, а другие нет)

RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru$ [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^(.*)$ https://site.ru/$1 [NC,L,R=301]

Другой редирект на https по порту и http

RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]

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

RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

Ультраредирект на https с www ИЛИ если хост не www.site.ru

RewriteCond %{SERVER_PORT} !443 [OR]
RewriteCond %{HTTP_HOST} !^www\.site\.ru [NC]
RewriteRule (.*) https://www.site.ru/$1 [R=301,L]

Ультраредирект2 на основной сайт с https ИЛИ если не на поддомене msk или spb

RewriteCond %{SERVER_PORT} !443 [OR]
RewriteCond %{HTTP_HOST} !^(msk|spb).site\.ru [NC]
RewriteRule (.*) https://site.ru/$1 [R=301,L]

Ультраредирект3 отредиректит всё, кроме своих поддоменов на основной сайт

RewriteCond %{HTTP_HOST} !site\.ru [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.site\.ru
RewriteRule (.*) https://site.ru/$1 [R=301,L]

Конструкция Redirect

Редирект всех запросов на другой сайт

Redirect 301 / http://site.ru/

или

Redirect permanent / http://new-domain.ru/

Редирект с одной страницы на другую

Redirect 301 /old-page.html http://site.ru/new-page.html

или

Redirect permanent /old-page.html http://site.ru/new-page.html

RedirectMatch

(можно использовать регулярки regexp)

Сменить все ссылки с *.php на *.aspx

RedirectMatch /(.*)\.aspx$ /$1.php

Редирект с подраздела activity на главную

RedirectMatch 301 ^/activity/(.*)$ /

Условия

RewriteCond %{REQUEST_FILENAME} !-f - требует, чтобы правило RewriteRule применялось только в том случае, если запросу не соответствует физически существующий файл
RewriteCond %{REQUEST_FILENAME} !-d - запрос не должен применяться, если запрашивается физически существующая папка. Таким образом, правило в RewriteRule, следующее за этими директивами будет касаться только виртуальных
URL для которых нет папки или файла на диске сервера.
RewriteCond %{REQUEST_FILENAME} !-l - Проверяется существование этого пути и то что этот путь является символической ссылкой
RewriteRule ^(.*)$ index.php [L,QSA] - Регулярное выражение, в нашем случае — при любой строке запроса будет открывать index.php, добавляя её (строку запроса) в $_SERVER[‘REQUEST_URI’]:

NGINX

Редирект http на https

if ($ssl_protocol = "") {rewrite ^ https://$server_name$request_uri? permanent;}

или

if ($host ~* ^site.ru) { rewrite ^(.*)$ https://site.ru/$1 permanent;}

Редирект на другой сайт с https

if ($host ~* ^site.ru$) {
rewrite ^(.*)$ https://newsite.ru$1 permanent;
}

Редирект на https если указанный хост с www или без

if ($host ~* ^(site\.ru|www\.site\.ru)$ ){
rewrite ^/(.*)$ https://site.ru/$1 permanent;
}

Редирект 301 с одной страницы на другую

rewrite ^/provedenie-salutov.html$ /provedenie-salyutov.html permanent;

PHP

Редирект 301 на https

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;
}

 

Поделиться