Как сделать редирект страницы в htaccess

Добавлено: 14.04.2018, 20:11 / Просмотров: 33165

Написан: 29.08.2014 Обновлён: 12.01.2017 комментариев 118
Автор: Андрей Воскобойников

Три важных совета и четырнадцать конкретных примеров установки 301 переадресации страниц через htaccess!

301 редирект

Советы Располагайте переадресации страниц в файле от частных к более глобальным (сверху вниз). Например: простая переадресация двух страниц стоит выше, чем глобальное правило редиректов с www на без www. Избегайте двух, трех и т.д. последовательных редиректов. Правила должны быть настроены так, что при возникновении редиректа он должен перенаправлять пользователя (робота) только один (!) раз. Каждое лишнее переадресация – это секунды драгоценного времени отдачи страницы, это нагрузка на сервер, это нечеткие команды для поисковых роботов. Не забывайте, что многие браузеры кешируют (запоминают редиректы), поэтому проверять переадресации лучше на сайте — http://www.bertal.ru. Правила переадресаций 1. 301 редирект с одной страницы на другую

Самый простой вариант

1 Redirect 301 /test-1/ http://site.ru/test-2/

Redirect 301 /test-1/ http://site.ru/test-2/

Более подробный

1 2 RewriteCond %{REQUEST_URI} ^/test/$ RewriteRule ^.$ http://site.ru/new-test/? [R=301,L]

RewriteCond %{REQUEST_URI} ^/test/$ RewriteRule ^.$ http://site.ru/new-test/? [R=301,L]

2. 301 редирект с www на без www (главное зеркало – домен без www) 1 2 RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301]

3. 301 редирект с без www на www (главное зеркало – домен с www) 1 2 RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301]

RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301]

4. 301 редирект со страниц со слешем на без слеша (весь сайт) 1 2 3 4 5 6 RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.)\/$ / [R=301,L]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.)\/$ / [R=301,L]

5. 301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически) 1 2 3 4 5 6 RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteRule ^(.[^\/])$ // [R=301,L]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteRule ^(.[^\/])$ // [R=301,L]

6. Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1// [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://%1// [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1// [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://%1// [L,R=301]

7. Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://www.%1// [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1// [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301]

RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://www.%1// [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1// [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301]

8. Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)\/$ http://www.%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)\/$ http://www.%1/ [L,R=301]

RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)\/$ http://www.%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)$ http://www.%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)\/$ http://www.%1/ [L,R=301]

9. Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)\/$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)\/$ http://%1/ [L,R=301]

RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)\/$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.)$ RewriteRule ^(.)$ http://%1/ [L,R=301] RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].)$ RewriteRule ^(.)\/$ http://%1/ [L,R=301]

10. 301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru 1 2 3 RewriteCond %{REQUEST_URI} /index.php RewriteCond %{QUERY_STRING} ^\z RewriteRule ^(.)$ http://site.ru/? [R=301,L]

RewriteCond %{REQUEST_URI} /index.php RewriteCond %{QUERY_STRING} ^\z RewriteRule ^(.)$ http://site.ru/? [R=301,L]

11. 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)

Пример: типа site.ru/index.php?n=1 на site.ru/?n=1

1 2 RewriteCond %{REQUEST_URI} /index.php RewriteRule ^(.)$ http://site.ru/ [R=301,L]

RewriteCond %{REQUEST_URI} /index.php RewriteRule ^(.)$ http://site.ru/ [R=301,L]

12. 301 редирект для index.php, index.html или index.htm (например в Joomla), массовая склейка 1 2 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.)index\.(php|html|htm)$ http://site.ru/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.)index\.(php|html|htm)$ http://site.ru/ [R=301,L]

13. 301 редирект url с GET параметрами (динамический URL) на статический

1 вариант (простой адрес с GET параметром)

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

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

2 вариант (со страницы и GET параметром)

1 2 3 RewriteCond %{REQUEST_URI} /test/ RewriteCond %{QUERY_STRING} ^id=229 RewriteRule ^.$ /supermodel/? [R=301,L]

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

14. Все страницы одного домена на главную страницу другого домена 1 2 RewriteCond %{REQUEST_URI} (.) RewriteRule ^(.)$ http://site.ru/ [L,R=301]

RewriteCond %{REQUEST_URI} (.) RewriteRule ^(.)$ http://site.ru/ [L,R=301]

15. Каждая страница одного домена на такой же адрес другого url 1 2 RewriteCond %{REQUEST_URI} (.) RewriteRule ^(.)$ http://site.ru/ [L,R=301]

RewriteCond %{REQUEST_URI} (.) RewriteRule ^(.)$ http://site.ru/ [L,R=301]

16. Редирект с протокола http на https. 1 2 RewriteCond %{HTTPS} !=on RewriteRule ^(.)$ https://%{HTTP_HOST}/ [R=301,L]

RewriteCond %{HTTPS} !=on RewriteRule ^(.)$ https://%{HTTP_HOST}/ [R=301,L]

Если возникает циклический редирект, то воспользуйтесь этим вариантом:

1 2 3 RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

17. Редирект с протокола https на http.

Обратный редирект, если перестали использовать SSL сертификат.

1 2 RewriteCond %{HTTPS} =on RewriteRule ^(.)$ http://%{HTTP_HOST}/ [R=301,L]

RewriteCond %{HTTPS} =on RewriteRule ^(.)$ http://%{HTTP_HOST}/ [R=301,L]

UPDATE 02/11/2016


Источник: https://web-optimizator.com/301-redirekt-htaccess/


Поделись с друзьями

Рекомендуем посмотреть ещё:


Закрыть ... [X]

Похожие новости


Установка привода ворот своими руками
Маска для угрей в домашних условиях с активированным углем
Лечить шпоры на ногах в домашних условиях
Как из молока сделать твердый сыр
Как сделать написанную книгу
Autolift 3000 своими руками


Как сделать редирект страницы в htaccess
Как сделать редирект страницы в htaccess


Как сделать 301 редирект в.htaccess : переадресация страниц
Редирект 301 в htaccess, как настроить правильную переадресацию или 301



ШОКИРУЮЩИЕ НОВОСТИ


Back to Top