htaccess Редиректы (примеры)

Приведенные ниже примеры могут быть добавлены в ваш файл .htaccess именно так, как показано. Только не забудьте изменить путь к файлу, чтобы файл .htaccess знал, где он находится. Также, если вы видите домен example.com, измените его на свое доменное имя.

Редирект на страницу "со слэшем на конце"

Пример показывает как сделать перенаправление на страницу со слэшем на конце, со страницы у которой нет слэша на конце: /somepage/somepage/.

RewriteCond %{REQUEST_URI} !(/$|\.|wp-json)
RewriteCond %{QUERY_STRING} ^$
RewriteRule . %{REQUEST_URI}/ [R=301,L]

Добавление www в URL

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

Удаление www из URL

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteRule (.*) https://example.com/$1 [R=301,L]

Редирект на HTTPS (SSL)

Следующий код перенаправляет любой http-запрос на https. Т.е. при переходе на страницу http://example.com вас перекинет на https://example.com. Статические ресурсы (изображения, css и т.д.) также будут обработаны:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header always set Content-Security-Policy "upgrade-insecure-requests;"

HTTPS перенаправление для WordPress

Никогда не добавляйте ваши правила внутри правил WordPress, внутри:

# BEGIN WordPress
# END WordPress

Потому что эти правила авто-генерируются и ваш код в какой-то момент исчезнет!

Посетитель может ввести прямой HTTP URL на вашем сайте WordPress, даже если SSL-сертификат активен. Чтобы заставить любой HTTP-запрос перенаправляться на HTTPS, вы можете добавить код в файл WordPress .htaccess. Ниже приведены два варианта кода, которые вы можете использовать. Первый должен работать, как показано, но если нет, попробуйте второй вариант.

Вариант #1

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header always set Content-Security-Policy "upgrade-insecure-requests;"

# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<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

Вариант #2

В этом примере обязательно замените example.com на ваше настоящее доменное имя.

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L,NE]
Header always set Content-Security-Policy "upgrade-insecure-requests;"

# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<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

Редирект сайта на новый домен

Следующая строка перенаправляет все URL-адреса вашего сайта на новый сайт.

Redirect 301 / https://example.com/

Примеры простых редиректов отдельной страницы

Использование Redirect в файле .htaccess позволяет перенаправлять пользователей со старой страницы на новую без необходимости сохранения старой страницы.

Например, если вы используете index.html в качестве индексного файла, а затем позже переименуете index.html в home.html, вы можете настроить перенаправление для отправки пользователей с index.html на home.html:

Внутренний редирект на другую страницу

Redirect /path/to/old/file/old.html /path/to/new/file/new.html

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

Redirect /path/to/old/file/old.html https://www.example.com/new/file/new.html

Первый путь к старому файлу должен быть локальным путем, а не полным путем. Так, если файл .htaccess находится в каталоге /example.com, не нужно включать /home/username/example.com в локальный путь. Первая / представляет каталог example.com. Если старый файл находился в этом каталоге, то после / следует имя старого файла.

Второй путь к новому файлу может быть локальным путем, но может быть и полным URL-адресом для ссылки на страницу на другом или том же сервере.

301 редирект каталога в HTML-файл

RedirectMatch 301 ^/blog/about /blog/about.html

Перенаправление файла index.html в другой каталог

Redirect /index.html /new/

Перенаправление с index.html на default.html

Redirect /index.html /default.html

Перенаправление локального каталога /private в каталог /private другого сайта

Redirect /private/ https://www.example.com/private/

Загрузка файла .gif с другого сайта

Убедитесь, что другой сайт является вашим собственным. Никогда не делайте горячих ссылок на файлы с других сайтов.

Redirect /img/logo.gif https://www.example.com/images/logo.gif

Использование регулярных выражений

Если вы хотите использовать регулярное выражение для перенаправления чего-либо, используйте директиву RedirectMatch:

RedirectMatch "^/oldfile\.html/?$" "https://example.com/newfile.php"

Перенаправление сообщений об ошибках

Вы также можете перенаправлять ошибки 404. Вместо того чтобы выводить страницу 404, вы перенаправляете на домашнюю страницу сайта.

ErrorDocument 404 https://example.com/

Перенаправление старого каталога в новый каталог

Этот пример перенаправляет файлы из старой директории /blog/archives в новую директорию /archives. Файл должен существовать в новой директории.

RewriteRule ^blog/archives/(.*)$ /newarchives/$1 [R=301,NC,L]

Направим запрос в подкаталог (переадресация с главной)

Этот пример перенаправляет запрос с главной страницы сайта в подкаталог. Т.е. при переходе на главную вас перенаправит в папку example.com/subdir1:

RewriteEngine on
RewriteRule ^$ /subdir1/ [L]

Переписывание URL-адреса

Этот пример переписывает URL в другой URL. В результате example.com/1.html переписывается в example.com/abc.php?id=1.

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([0-9]+).html /abc.php?id=$1 [QSA,L]

Ниже приведены пояснения к вышеуказанным правилам:

([0-9]+)
Ищет любые цифры повторяющуюся 1 или более раз.
([a-z-]*)

Ищет любые строчные буквы и знак -, 0 или более раз. Если нужно, чтобы поддерживались и прописные буквы, используйте ([a-zA-Z-]*). Например:

RewriteRule ^place/([a-zA-Z-]*).html /place/abc.php?id=$1 [QSA,L]
[QSA,L]
Делает сценарий последним выполненным правилом в htaccess. Т.е. если это правило сработало, то немедленно происходит редирект и никакой код ниже не выполняется.

Дополнительную информацию и примеры по mod-rewrite можно найти по следующей ссылке:

Направим все URL в файл index.php

Если посетитель пытается зайти на несуществующую страницу или запрашивает несуществующий файл, то обычно ему выдается ошибка 404. Вместо этого его запрос можно перенаправить файл index.php.

Следующая команда направляет все URL на index.php, если файл или каталог не существует физически.

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

--

Источник