2.3.4 301 редирект через .htaccess

301 редирект баннер

Правила роботи .htaccess

Редиректи грають важливу роль у веб-розробці, дозволяючи перенаправляти відвідувачів з однієї сторінки на іншу. Один із найпоширеніших типів редиректів - це 301 Moved Permanently, який повідомляє пошуковим системам і веб-браузерам, що сторінка була перенесена назавжди. Це важливий інструмент для управління структурою вашого веб-сайту, дозволяючи перенаправляти відвідувачів з однієї сторінки на іншу адресу.

У цій статті ми розглянемо приклади готових 301 редиректів з використанням файлу .htaccess, який може знаходитися як у корені вашого веб-сайту, так і бути створеним в будь-якій іншій його директорії. Кожен файл .htaccess застосовується до всіх піддиректорій всередині директорії, де він розташований. Це означає, що налаштування, визначені в .htaccess всередині конкретної директорії, будуть розповсюджуватися на всі файли та піддиректорії всередині цієї директорії.

Приклади готових 301 редиректів

1. Найпростіший варіант - 301 редирект з однієї сторінки на іншу:
.htaccess
Redirect 301 /example-1/ http://example.com/page-2/

Більш детальний:

.htaccess
RewriteCond %{REQUEST_URI} ^/page/$
RewriteRule ^.*$ http://example.com/new-page/? [R=301,L]
2. 301 редирект з www на без www (головне зеркало – домен без www):
.htaccess
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)$ http://%1/$1 [L,R=301]

В початку файлу .htaccess потрібно додати:

.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.(.)$ [NC]
RewriteRule ^(.)$ http://%1/$1 [R=301,L]
3. 301 редирект з без www на www (головне зеркало – домен з www):
.htaccess
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)$ http://www.%1/$1 [L,R=301]
4. 301 редирект зі сторінок зі слешем на без слеша (весь сайт):
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} ![^/]$
RewriteRule ^(.*)/$ /$1 [R=301,L]
5. 301 редирект зі сторінок без слеша на слеш (часто в CMS встановлений за замовчуванням):
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
6. Один (а не два послідовних) 301 редирект на адресу без www і з слешем на кінці сторінки:
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)$ http://%1/$1/ [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} ![^/]$
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)$ http://%1/$1 [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)$ http://%1/$1/ [L,R=301]
7. Один (а не два послідовних) 301 редирект на з www і зі слешем в кінці адреси сторінки:
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)$ http://www.%1/$1/ [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)$ http://www.%1/$1/ [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} ![^/]$
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)$ http://www.%1/$1 [L,R=301]
8. Один (а не два послідовних) 301 редирект на з www і без слеша в кінці адреси сторінки:
.htaccess
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)$ http://www.%1/$1 [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} /$
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)/$ http://www.%1/$1 [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)$ http://www.%1/$1 [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} /$
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)/$ http://www.%1/$1 [L,R=301]
9. Один (а не два послідовних) 301 редирект на без www і без слеша в кінці адреси сторінки:
.htaccess
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)$ http://%1/$1 [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} /$
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)/$ http://%1/$1 [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)$ http://%1/$1 [L,R=301]
.htaccess
RewriteCond %{REQUEST_URI} !?
RewriteCond %{REQUEST_URI} !&
RewriteCond %{REQUEST_URI} !=
RewriteCond %{REQUEST_URI} !.
RewriteCond %{REQUEST_URI} /$
RewriteCond %{HTTP_HOST} ^([^www].)$
RewriteRule ^(.)/$ http://%1/$1 [L,R=301]
10. 301 редирект тільки адреси example.com/index.php (без GET-параметрів) на основне зеркало example.com:
.htaccess
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://example.com/? [R=301,L]
11. 301 редирект всіх адрес с index.php і GET-параметрами на сторінки тільки з GET-параметрами (вирізати в URL index.php)

Приклад: редирект з example.com/index.php?n=1 на example.com/?n=1:

.htaccess
RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://example.com/ [R=301,L]
12. 301 редирект URL з GET-параметрами (динамічний URL) на статичний:

Варіант №1 (проста адреса з GET-параметрами):

.htaccess
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]

Варіант №2 (зі сторінки і GET-параметром):

.htaccess
RewriteCond %{REQUEST_URI} /page/
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]
13. Всі сторінки одного домену на головну сторінку іншого домену:
.htaccess
RewriteCond %{REQUEST_URI} (.)
RewriteRule ^(.)$ http://example.com/ [L,R=301]
14. Кожна сторінка одного домену на таку ж адресу іншого URL:
.htaccess
RewriteCond %{REQUEST_URI} (.)
RewriteRule ^(.)$ http://example.com/$1 [L,R=301]