2.7.1.1.3. Редиректы

Важные моменты:

  • В настройках сайта можно включать редирект на HTTP/HTTPS и на адрес с www или без www. При их использовании настраивать аналогичный редирект в .htaccess не нужно.
  • Редиректы в .htaccess не будут работать для файлов, указанных в списке статических файлов.
  • Редирект не будет срабатывать для URL, в начале имени файла которых содержатся символы .ht, например .htaccess или .htpasswd. Обратите внимание, это правило не касается расширений файлов .html или ему подобных.

Директивы редиректа нужно размещать в файле .htaccess, расположенном в корневом каталоге сайта, с которого должен выполняться редирект.

В качестве альтернативы можно использовать веб-редирект.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?example1.com [NC]
RewriteRule ^(.*) http://www.example2.com/$1 [L,R=301]

Вместо example1.com подставьте адрес сайта, с которого должен выполняться редирект, а вместо http://www.example2.com — на который.

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

Вместо https://example.com/ подставьте имя другого домена, на который должен выполняться редирект. Результат аналогичен предыдущему, за исключением того, что не проверяется доменное имя сайта, с которого происходит переадресация.

RewriteEngine On 
RewriteBase / 
RewriteRule ^(.*)$ http://example.com/desired_page/ [L,R=permanent]

Вместо http://example.com/desired_page/ подставьте адрес страницы другого сайта, на которую должен выполняться редирект

RewriteCond %{REQUEST_URI} ^/old/address/$
RewriteRule ^.*$ http://example.com/new/address/? [R=301,L]

Вместо example.com подставьте адрес нового сайта, на который должен выполняться редирект. Вместо /old/address/ укажите страницу, с которой нужно выполнять редирект, а вместо /new/address/на которую.

Если цель в ограничении доступа к сайту, в качестве альтернативы можно использовать настройки в панели управления или директивы в .htaccess.
RewriteEngine On
RewriteCond %{REMOTE_ADDR} X.X.X.X
RewriteRule .* https://example.com/new/address/? [R=301,L]

Вместо example.com подставьте адрес нового сайта, на который должен выполняться редирект, а вместо /new/address/ — адрес целевого файла или страницы. Вместо X.X.X.X укажите IP-адрес, для которого нужно выполнять редирект. IP-адрес можно указывать с учетом регулярных выражений.

Предварительно обязательно включите обработку запросов к несуществующим поддоменам.

RewriteEngine On 
RewriteBase / 
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [L,R=permanent]

Вместо example.com подставьте адрес своего сайта, для которого настраивается редирект.

RewriteRule ^path/to/file.php$ /new/address/ [L,R=301]

Вместо path/to/file.php подставьте адрес файла, с которого должен выполняться редирект, а вместо /new/address/ — адрес целевого файла или страницы.

RewriteCond %{REQUEST_URI} ^/old/address/$
RewriteRule ^.*$ http://%{HTTP_HOST}/new/address/ [R=301,L]

Вместо /old/address/ подставьте адрес страницы, с которой должен выполняться редирект, а вместо /new/address/ — на которую.

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

Вместо example.com подставьте адрес своего сайта, для которого настраивается редирект.

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

Вместо example.com подставьте адрес своего сайта, для которого настраивается редирект.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteEngine On 
RewriteBase / 
RewriteCond %{HTTP:SSL} =1 [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteRule ^admin(.*)$ https://%{SERVER_NAME}/admin$1 [L,R]

Вместо admin подставьте название каталога, для которого настраивается редирект.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteCond %{THE_REQUEST} !/path/to/file.php [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Вместо /path/to/file.php подставьте путь к файлу, для которого не должен срабатывать редирект на HTTPS.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteCond %{REQUEST_URI} !^/path/to/dir [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Вместо /path/to/dir подставьте путь к каталогу, для которого не должен срабатывать редирект на HTTPS.

Вместо php можно указывать любой другой тип файла, который нужно удалить из адреса, к примеру html.
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php($|\ |\?)
RewriteRule ^ /%1 [R=301,L]

Внимание!

Удаление расширения из URL может негативно сказаться на работе определённых систем, которые используют методы POST для отправки данных скрипту. Важно учитывать, что такое правило может создать проблемы в работе сайта.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L,QSA]
RewriteCond %{THE_REQUEST} ([^\s]*)\.php(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]

Вместо php укажите нужное расширение.

Например, для example.com/file.html будет выполняться редирект на example.com/file, но по факту будет открываться file.html.

RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ /$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteCond %{THE_REQUEST} //
RewriteCond %{QUERY_STRING} !http(s|)://
RewriteRule .* /$0 [R=301,L]

Не используйте редирект с помощью .htaccess

Редирект URL в нижний регистр с помощью .htaccess может привести к превышению нагрузки и, как следствие, нарушению работы сайтов и хостинг-аккаунта в целом. Чтобы такой проблемы не возникало, используйте редирект с помощью PHP-кода.
Содержание

    (1)