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)