.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;
}
Свежие комментарии