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