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 / RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ https://сайт.com/$1 [L,R=301]
Замість https://сайт.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/
— на котру.
На цей же сайт
Cо усіх неіснуючих піддоменів на основний
Попередньо обов'язково включите обробку запитів до неіснуючих піддоменів.
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 / без www
З www на без www
Для редиректу з www.сайт.com
на сайт.com
:
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www.сайт.com$ [NC] RewriteRule ^(.*)$ http://сайт.com/$1 [R=301,L]
Замість сайт.com
підставте адресу свого сайту, для якого налаштовується редирект.
З без www на www
Для редиректу з сайт.com
на www.сайт.com
:
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^сайт.com [NC] RewriteRule ^(. *) Http: //www.сайт.com/$1 [L,R=301]
Замість сайт.com
підставте адресу свого сайту, для якого налаштовується редирект.
HTTP/HTTPS
З HTTP на HTTPS
RewriteEngine On RewriteBase / RewriteCond %{HTTP:SSL} !=1 [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
З HTTPS на HTTP
RewriteEngine On RewriteBase / RewriteCond %{HTTP:SSL} =1 [NC] RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
З HTTP на HTTPS для певного каталогу
RewriteEngine On RewriteBase / RewriteCond %{HTTP:SSL} !=1 [NC] RewriteRule ^admin(.*)$ https://%{SERVER_NAME}/admin$1 [L,R]
Замість admin
підставте назву каталогу, для якого налаштовується редирект.
З HTTP на HTTPS для всього, крім одного файлу
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.
З HTTP на 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.
Зміна URL
Видалення index.php
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]