2.12.3. редіректи

Важливі моменти:

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

Директиви редиректу потрібно розміщувати в файлі .htaccess, Розташованому в кореневому каталозі сайту, з якого повинен виконуватися редирект.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(Www.)?Сайт1.com [NC]
RewriteRule ^(. *) Http: //www.сайт2.com/$1 [L,R=301]

Замість сайт1.com підставте адресу сайту, з якого повинен виконуватися редирект, а замість http://www.сайт2.com — на який.

В якості альтернативного варіанту можна використовувати веб-редирект.

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

Замість http://сайт.com/desired_page/ підставте адресу сторінки іншого сайту, на котру повинен виконуватися редирект

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

Замість сайт.com підставте адресу нового сайту, на який повинен виконуватися редирект. замість /old/address/ вкажіть сторінку, з якою потрібно виконувати редирект, а замість /new/address/на котру.

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

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

Замість сайт.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/ — на котру.

Для редиректу з www.сайт.com на сайт.com:

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

Замість сайт.com підставте адресу свого сайту, для якого налаштовується редирект.

Для редиректу з сайт.com на www.сайт.com:

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

Замість сайт.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 вкажіть потрібне розширення.

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]
Зміст