Настроить 301 редирект в htaccess страницу

Случается такое, что веб-страница или весь сайт целиком переезжает на новый URL-адрес навсегда. В этом случае необходимо прописывать 301 редирект. Что это? 301 редирект — это перенаправление посетителей и поисковых роботов с одного URL-адреса на другой.

301 редирект обычно прописывается в следующих случаях:

  • при склеивании зеркал сайта с www и без www;
  • при переезде сайта на новый домен;
  • при переносе сайта на новую CMS;
  • при изменении URL-адресов страниц;
  • при устранении дублей страниц сайта.
  • Как ни странно, последний случай рассматривают крайне редко, хотя при устранении дублей 301 редирект помогает как никто другой, если, конечно, у вас нет желания ковырять код самой CMS. А если вы занимаетесь поисковой оптимизацией сайтов, то вопрос наличия или отсутствия дублей у страниц сайта обязательно должен вас волновать.

    301 редирект замечателен тем, что он передает pr-страниц и сайта, а соответственно и ссылочный вес новому URL. Но зато он не передает наложенные на старый домен санкции со стороны поисковых систем, что вдвойне приятно.

    Итак, с тем, что такое 301 редирект, разобрались. Перейдем непосредственно к тому, как его сделать.

    Как настроить 301 редирект

    Для начала я приведу список операторов регулярных выражений , которые пригодятся вам при настраивании 301 редиректов.

    • ^ — ограничение слева;
    • $ — ограничение справа;
    • * — 0 и более символов;
    • + — 1 и более символов;
    • . — любой символ;
    • \ — экранирование;
    • () — переменная;
    • — диапазон значений.

    Существуют различные способы того, как сделать 301 редирект. Лично я, как и многие другие вебмастера, настраиваю его через файл.htaccess. Данный файл есть практически у каждой популярной CMS, и находится он в корне вашего сайта. Скачать.htaccess можно через при помощи клиента FileZila:

    Файл.htaccess следует открыть текстовым редактором, к примеру, Notepad++. Поверх всех кодов редиректов вам следует прописать следующую строку:

    RewriteEngine On

    В противном случае редиректы работать не будут.

    Многие ошибочно полагают, что можно обойтись и без 301 редиректа. Я могу вам сказать, что он необходим при оптимизации практически каждого сайта. К примеру, абсолютно каждый сайт изначально доступен по двум адресам — с www и без www. Беда в том, что это приводит к размыванию ссылочной массы. Объясню почему. Другим сайтам абсолютно все равно, какой из двух вариантов написания вашего домена является основным. Если они будут ставить на вас ссылки, то в адресе могут прописывать как вариант с www, так и без www. Ссылочная масса в итоге будет размыта, а поисковики в любом случае будут индексировать только один вариант. Когда-то так они вообще воспринимали их как совершенно разные сайты.

    Чтобы ваш сайт активно рос в позициях и не терял ссылочную массу, требуется в файле.htaccess прописать 301 редирект.

    С www на без www:

    RewriteCond %{HTTP_HOST} ^www.site.ru$ RewriteRule (.*) http://site.ru/$1

    С без www на www:

    RewriteCond %{HTTP_HOST} ^site.ru$ RewriteRule (.*) http://www.site.ru/$1

    Если приведенные выше коды редиректа не сработают, то воспользуйтесь следующей записью для редиректа с www на без www:

    RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1

    Помните, что вместо site.ru нужно прописывать домен вашего сайта. После проделанных действий сохраните файл.htaccess и закачайте его на сервер, заменив им старый файл.

    301 редирект очень часто выручает меня, когда я борюсь с дублями страниц сайта. А это я делаю практически каждый раз, когда выполняю внутреннюю оптимизацию очередного сайта. Лично я еще не встречал CMS, которая бы не генерировала дубли. Хотя если речь идет о небольшом сайте, то бывают исключения. Понятия не имеете, о чем я сейчас говорю? Тогда подписывайтесь на , вскоре я напишу о дублях целую статью.

    Бывает такое, что страница сайта доступна сразу по двум URL-адресам вида: http://site.ru/category/page.html и http://site.ru/page.html. В данном случае идет речь о дублях. К примеру, мы хотим, чтобы страница была доступна только по адресу второго вида. В таком случае для избавления от дубля необходимо прописать следующий редирект:

    RewriteRule ^(.*)category/page.html$ http://site.ru/page.html

    Теперь представьте ситуацию, что вы изменили адрес страницы сайта. Для чего? Да, могут быть самые разные причины. Я, к примеру, совсем недавно это делал с целью укорачивания длины URL. Для этого вам понадобится следующий редирект:

    RewriteRule ^(.*)old-page.html$ http://site.ru/new-page.html

    Если приведенный выше код редиректа не сработает, попробуйте следующий:

    RewriteRule ^old-page.html$ http://site.ru/new-page.html

    Или такой:

    RewriteRule ^old-page.html$ /new-page.html

    Если требуется сделать редирект со старого URL-адреса на кириллице на новый URL-адрес (хоть на кириллице, хоть на латинице), то запись будет иметь вид:

    RewriteRule ^старый-урл.html /new-page.html

    Как вы понимаете, выше мы рассматривали редиректы с одного URL на другой в пределах одного сайта . Для этого мы использовали mod_rewrite и директиву RewriteRule. Но можно обойтись и более простым вариантом записи редиректа при помощи директивы Redirect:

    Redirect 301 /old-page.html http://site.ru/new-page.html

    Оба варианта записи редиректа корректны и передают ссылочный вес и другие показатели. Они отличаются лишь тем, что используют директивы разных модулей, и поэтому имеют различный синтаксис. При использовании директивы Redirect сначала прописывается старый адрес страницы без http://site.ru, а затем новый адрес полностью.

    301 редирект может вам понадобиться при переезде сайта со старого домена на новый :

    RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.old-domen\.ru$ RewriteRule ^(.*)$ http://new-domen.ru/$1 RewriteCond %{HTTP_HOST} ^old-domen\.ru$ RewriteRule ^(.*)$ http://new-domen.ru/$1

    Аналогичный редирект с использованием директивы Redirect:

    Redirect 301 / http://new-domen.ru

    Можно прописать 301 редирект URL с параметром на любую другую страницу сайта , к примеру, главную:

    RewriteCond %{QUERY_STRING} ^cPath=373_703 RewriteRule ^index\.php$ http://site.ru/?

    Приведенный выше пример из моей практики, когда я проводил внутреннюю оптимизацию сайта на Joomla, у которого было огромное количество различных дублей.

    Редирект с site.ru/index.php на site.ru (избавляемся от дубля главной страницы):

    RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://site.ru/

    В результате наличия у главной страницы сайта дубля вида site.ru/index.php аналогичные дубли могут появляться и у внутренних страниц сайта, к примеру, site.ru/index.php/page.html является дублем страницы site.ru/page.html. В данном случае все дубли такого вида разом можно устранить при помощи редиректа:

    RewriteRule ^index\.php/(.*)$ /$1

    Если у главной страницы вашего сайта есть дубль вида site.ru/main.html , то следует прописать следующий редирект:

    RewriteEngine On RewriteCond %{THE_REQUEST} ^{3,9}\ /main\.html\ HTTP/ RewriteRule ^main\.html$ http://vash-sait.ru/

    или же такой вариант:

    Redirect 301 /main.html http://site.ru/

    Теперь представим ситуацию, что вы хотите, чтобы все внутренние страницы сайта были доступны только по адресу с.html на конце . Тогда следует прописать следующий редирект:

    RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?) RewriteRule .* %1.html RewriteRule ^(.*)/$ /$1.html

    Если же наоборот вы хотите, чтобы все внутренние страницы сайта имели адрес без.html на конце , то есть адрес вида site.ru/page, то следует прописать редирект:

    RewriteCond %{REQUEST_URI} \.html$ RewriteRule ^(.*)\.html$ /$1

    Если стоит задача редиректа с URL-адресов с.htm на конце на адреса с.html на конце , то в.htaccess следует добавить следующую запись:

    RewriteBase / RewriteRule ^(.*)\.htm$ $1.html

    Возможно, вам потребуется сделать редиректы с URL-адресов без суффиксов на адреса со слэшем на конце . Тогда в файле.htaccess следует прописать следующее:

    RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..+$ RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) http://www.site.ru/$1/

    Если задача полностью противоположная, и требуются редиректы с URL-адресов со слэшем на конце на адреса без суффикса , то добавьте следующий код:

    RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ /$1

    Чтобы прописать редирект с URL-адреса с параметром вида http://site.ru/?page_id=111, добавьте в.htaccess следующее:

    RewriteCond %{QUERY_STRING} page_id=111 RewriteRule ^ http://site.ru/new-page/

    Также совсем недавно столкнулся с сайтом, для которого был получен сертификат о его безопасности, и было необходимо прописать редирект с http на https :

    RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

    Теперь вы знаете, как прописать 301 редирект. Конечно же, существуют и другие случаи, когда он необходим, но я указал наиболее популярные из них. После любой задачи, касающейся оптимизации сайта, я рекомендую производить проверку на ошибки.

    Как проверить 301 редирект

    301 редирект проверяется очень просто. Все, что вам нужно, это ввести в строке браузера старый адрес страницы. Если произойдет перенаправление на новый URL-адрес, то скорее всего редирект прописан верно. В некоторых случаях перед тем как проверить 301 редирект, приходится чистить кэш браузера. Поэтому если перенаправление не происходит, возможно, вы забыли это сделать.

    Чтобы окончательно убедиться в том, что 301 редирект настроен верно, рекомендую также проверить ответ сервера при помощи специальных сервисов, к примеру, 2ip.ru , а еще лучше воспользуйтесь программой Netpeak Spider, при помощи которой можно узнать еще и много другой информации о сайте. Ответ сервера должен быть «301 » или же «301 MovedPermanently -> 200 OK».

    Надеюсь, теперь Вы поняли, как правильно настраивать 301 редирект. Выше я привел достаточное количество различных примеров. Если не сработает один тип записи редиректа, скорее всего сработает другой. Пробуйте. От чего зависит, какая именно запись редиректа сработает, точно сказать не могу, так как не являюсь программистом. Возможно, от CMS или настроек сервера. Также иногда влияет расположение кода редиректа в файле.htaccess. Если редирект не срабатывает, попробуйте перенести его код чуть выше по файлу. На этом у меня все. Успехов в оптимизации сайтов!

    Правила приведены для сервера Apache. В правилах: %{QUERY_STRING} - обозначает фрагмент URL -адреса после знака вопроса (задания значений CGI -параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL -адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) .

    Ниже даны наиболее используемые правила настройки файла.htaccess для 301 редиректа. Лучше размещать все правила после двух строк:

    Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1 RewriteCond %{HTTP_HOST} ^www.site\.ru$ RewriteRule ^(.*)$ http://site.ru/$1 Redirect 301 /was.php http://www.site.ru/new.php

    При этом, новый адрес указывать необходимо полностью с http и доменным именем.

    RewriteRule ^dir /dir-new/$1

    Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 , тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:

    RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ RewriteRule ^dir/index\.php$ /new/sef/?

    Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:

    RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ RewriteRule ^dir/index\.php$ /new/sef/?

    Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/ , но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.

    RewriteRule ^dir/$ http://www.site.ru/new-dir/

    Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона.рф преобразуется в.xn--p1ai .

    RewriteCond %{HTTP_HOST} ^old-site\.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1

    И для домена в зоне РФ:

    RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ RewriteRule ^(.*)$ http://www.site.ru/$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.site.ru/$1/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ http://www.site.ru/$1 RewriteCond %{HTTP_HOST} ^si-te\.ru$ RewriteRule ^(.*)$ http://www.site.ru/si-te/ RewriteRule ^bitrix/ /bitrix/admin/ RewriteRule ^(.*)$ http://www.newsite.ru/new/ RewriteRule ^dir(.*)$ /new-file.php RewriteRule ^dir/no-file.html /no-file-new.html RewriteRule ^dir(.*)$ /all.php RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php

    Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

    DirectoryIndex index.html index.php index.htm index.shtml RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://www.site.ru/ RewriteCond %{HTTP_HOST} ^test.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} RewriteRule [^abc]/unique-file.html /unique-file.html

    Код позволяет поставить 301-редирект со всех папок вида http://site.ruuniqe-file.html на один файл в корне /unique-file.html . Бывает полезен при переделке сайта и изменении ссылок.

    RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11

    Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/

    Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:

    ErrorDocument 404 /404-for-me.php RewriteCond %{HTTP_HOST} ^(+)\.site\.com$ RewriteRule ^(.*) http://site.com/$1 RewriteCond %{HTTP_HOST} ^(+)\.site\.com$ RewriteCond %{HTTP_HOST} !=one.site.com RewriteRule ^(.*) http://site.com/$1

    Все правила выполняются в прямом порядке их следования в файле.htaccess и правило, написанное позже, и будет выполняться позже.

    Для сайтов, на которых используется не сервер Apache, аналогичные 301 редиректы легко настраиваются с помощью PHP :

    Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.

    RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone)

    RewriteRule (.*) http://mobile.site.ru/

    RewriteCond %{HTTP_USER_AGENT} ! (accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer)

    RewriteRule (.*) http://no-search.site.ru/

    Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/

    RewriteCond %{QUERY_STRING} ^view=featured$ RewriteRule ^component/content/?$ /?

    RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ RewriteRule ^index\.php$ /? . - Точка заменяет произвольный символ. - обозначает перечень символов, совпадающих с буквами a, b, или с. [^abc] - перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с. * - означает, что предшествующий символ может повторяться (0 или более раз). * - команда найдёт идущие подряд символы из заданного набора. [^abc]* - с точностью до наоборот. .* - заменяет абсолютно любой набор символов. ".*" - найдёт все подстроки между кавычками. ^ - начало строки (в том случае, если используется в начале выражения). $ - обозначает конец строки. \w - буква, цифра или подчёркивание _. \d - заменяет любую цифру. \D - заменяет любой символ, но не цифру. - заменяет любую цифру. - любая буква от a до z (весь латинский набор символов) в нижнем регистре. - любая буква от A до Z в ВЕРХНЕМ регистре. - любая буква от a до Z в любом регистре. - то же самое. RewriteRule (.*) $1?

    Располагать после: RewriteBase /

    Памятка по используемым символам и обозначениям Строчка RewriteCond - условие выполнения правила RewriteRule . Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
    Спецсимволы, используемые в правилах и их значения.

    ^ - спецсимвол начала строки;
    $ - спецсимвол конца строки;
    ! - спецсимвол отрицания;
    . - точка, заменяет любой символ, но только один;
    () - группировка;
    \ - «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

    Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.

    Символ повторяется 0 или 1 раз.
    + - повторяется от 1 до 65536 раз.
    * - повторяется от 0 до 65536 раз.

    Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем или .

    NC - флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
    R - флаг Redirect, производит процесс остановки изменения URL -адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY ).
    L - флаг Last, останавливает формирования URL -адреса и строка считается окончательной.

    • Redirect 301 – теория и практика редиректа, настройка и правила использования

    UPD :

    RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI}

    RewriteCond %{SERVER_PORT} ^443$ RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://your_site.com/$1

    Конфигурационный файл .htaccess является конфигом для веб-серверов на Apache. Большинство хостингов работают через этот сервер, поэтому на каждом сайте присутствует этот файл. Вебмастера могут частично управлять его работой внося в него свои изменения. В этой статье мы рассмотрим директивы и правила, которые можно менять в работе сервера.

    Самый главный файл .htaccess располагается в корне сайта:

    Его действия распространяются на текущий каталог и на все вложенные каталоги. Т.е. у владельцев сайтов есть возможность воздействовать только на работу своего проекта, не мешая работе всего сервера. Если этот файл отсутствует, то его можно создать с помощью любого блокнота. Главное, чтобы название файла было ".htaccess" - без форматов.txt, .doc и т.д.

    Через файл .htaccess чаще всего настраивают 301 редиректы на уровне сервера, что сильно ускоряет процесс перехода на новую страницу, т.к. не надо загружать промежуточную страницу. Также здесь прописывается какой файл обрабатывает 404 ошибку .

    Чуть ниже мы рассмотрим все распространенные варианты редиректов через .htaccess , а для начала ознакомимся с опциями и правилами.

    Чтобы иметь возможность работать с редиректами нужно включить модуль ReWriteEngine . Для этого необходимо прописать две строчки кода (желательно в самом верху файла .htaccess ):

    Options +FollowSymLinks RewriteEngine On

    Разместите эти строки в самом верху файла .htaccess , чтобы иметь возможность работать с директивами модуля mod_write.

    Также на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).

    1. Правила Redirect, RewriteRule и RewriteCond 1.1. Директива Redirect

    Синтаксис Redirect :

    Redirect /откуда http://куда_полный_адрес

    Redirect устанавливает прямой редирект с одной страницы на другую.

    В status пишут код редиректа. Является необязательным параметром. Чаще всего пишут 301, что сигнализирует о постоянном смене адреса страницы.

    Важно, чтобы страница "откуда" была прописана в формате без указания полного адреса сайта, но с указанием полного относительного адреса URL начиная со слэша "/" (т.е. с корня сайта). Страницу куда идет редирект нужно писать полностью, т.е. абсолютный адрес страницы URL (т.е. с названием домена и протокола http или https).

    Например

    Redirect 301 /oldpage.php http://site/newpage.php

    Можно также писать по другому

    RedirectPermanent 301 /oldpage.php http://site/newpage.php или Redirect permanent 301 /oldpage.php http://site/newpage.php 1.2. Директива RewriteRule

    Директива RewriteRule устанавливает правила перехода. Синтаксис следующий:

    RewriteRule Шаблон Подстановка [коды]
    • При внешнем редиректе меняется урл адреса в строке браузера - " "
    • При внутреннем - не меняет урл адреса в строке браузера - " " или "[L] "
    1.3. Директива RewriteCond

    Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule.

    RewriteCond Сравниваемая_Строка Условие

    Например, этими условиями могут быть браузер пользователя, IP-адрес , заголовок и т.д.

    1.4. Директива RedirectMatch

    Директива RedirectMatch аналогична Redirect с той лишь разницей, что позволяет записывать регулярные выражения.

    RedirectMatch Откуда Куда 2. Примеры 301 редиректов в.htaccess

    Мы уже рассматривали множество примеров с редиректом по .htaccess в статьях:

    • Смена адреса сайта - редирект со старого домена на новый

    Здесь мы дополним варианты редиректов, которых еще не было.

    2.1. Редирект с одной страницы на другую

    Редирект с site.ru/cat/oldpage на site.ru/newpage.html

    RewriteRule ^cat/oldpage.* /newpage.html

    Или второй вариант:

    Redirect 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Редирект со всех файлов.htm на.html RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)\.htm$ $1.html

    Или второй вариант:

    RewriteRule ^(.*)\.htm$ $1.html 2.3. Редирект всего каталога на другую страницу

    С любой страницы в каталоге и подкаталогах /old/ будет происходит редирект на /new.php

    RewriteRule ^old(.*)$ /new.php 2.4. Удаление лишних слэшей в адресе URL

    Например, страница /catalog///stranica.html доступна и открывается. Чтобы избежать такой ситуации и не плодить бесконечное число дублей следует записать следующий редирект

    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. Реврайт без редиректа

    Можно загрузить другую страницу без смены адреса страницы URL. Например, загрузим страницу /news.html , а в адресной строке будет отображаться адрес /news/happy

    RewriteRule ^news/happy.* /news.html [L] 2.6. Простановка замыкающего слеша в конце адреса главной страница

    Например, многие сервера работают так, что последний слэш не пишется в URL. Например, http://site.ru . Ниже приведенный код решают это проблему: сайт будет открывать по http://site.ru/

    RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ 2.7. Удаляем директорию каталога из URL

    Например для редиректа со страницы site.com/directoriya/stranica.html на site.com/stranica.html нужно прописать следующее:

    RewriteRule ^directoriya/(.+)$ http://site.com/$1

    Или второй вариант:

    RewriteCond %{DOCUMENT_ROOT}/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. Редирект GET параметров

    Например, сделать редирект со страницы /?act=page&id=2 на /page-2/

    RewriteCond %{QUERY_STRING} act=page RewriteCond %{QUERY_STRING} id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Редирект на мобильную версию сайта m.site.ru

    В данном примере сначала проверяется факт того, что пользователь открыл сайт с мобильного устройства {HTTP_USER_AGENT} , далее происходит замена адреса сайта на m.URL

    RewriteCond %{HTTP_HOST} ^(.*)$ RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) RewriteRule ^$ http://m.%1 2.10. Редирект с поддомена

    Например, выполним редирект с любой страницы поддомена poddomen.site.ru на основной домен site.ru

    RewriteCond %{HTTP_HOST} ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} 3.Другие примеры с htaccess 3.1. Запретить IP-адрес и браузер

    Запретим открывать сайт для пользователя с браузера IE с IP-адресом 172.111.222.55

    RewriteCond %{HTTP_USER_AGENT} MSIE RewriteCond %{REMOTE_ADDR} ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Запретить конкретный файл

    Запретим для всех файл disable_file.html :

    deny from all 3.3. Разрешить доступ с одного ip

    Доступ будет разрешен только с одного ip-адреса 172.111.222.55

    order deny,allow deny from all allow from 172.111.222.55 3.4. Запретить доступ с разных ip

    Запретить доступ к сайту с нескольких ip-адреса 172.112.222.55, 172.113.222.55, 172.114.*.*

    order deny,allow deny from all deny from 172.112.222.55 deny from 172.113.222.55 deny 172.114.*.* 3.5. Редирект в URL с больших символов на маленькие

    Все большие буквы в адресе URL будут переведены на маленькие.

    RewriteRule - RewriteRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.*)$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*)F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q(.*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T]*)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^([^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y$2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %{ENV:HASCAPS} TRUE RewriteRule ^/?(.*) /$1

    Часто в веб разработке требуется делать переадресации с одной страницы (например, устаревшей) на другую. При этом переадресация может выполняться разными методами - как с потерей веса страницы, так и без нее. Но об этом подробнее.

    Как известно, любая страница со временем индексируется и имеет свой вес в сети. Если страница становится не актуальной, ее конечно можно удалить, но пользователи, которые перешли по ней, попадут на не существующий раздел сайта и в итоге его покинут. Правильнее считается на такие страницы делать 301 редирект на актуальные разделы сайта. Во-первых пользователь не увидит ошибку и вес старой страницы полностью передастся новой.

    Переадресацию страниц можно делать разными методами. Рассмотрим основные.

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

    В корне вашего сайта есть файл (если его нет - создайте) под названием.htaccess. Откройте его на редактирование и используйте один из следующих способов.

    Redirect permanent и Redirect 301 - легко делает 301 редирект с одной страницы на другую (или сайта). Первой идет старая ссылка сайта (заметьте - без домена), второй - ссылка на новую страницу (которая может быть этим же сайтом или вообще новым).

    Примеры:
    Redirect permanent /staraya-stranica.php http://newsait.ru/novaya-stranica.php
    (здесь просто переадресуем с устаревшей страницы на новую)

    Redirect 301 / http://newsait.ru/
    (здесь / означает, что все начиная с главной страницы сайта и всех его подстраниц (поддиректорий) будет переадресовываться на новый домен; т.е. фактически переадресация с оного домена на другой.)

    RewriteRule редирект - более сложный редирект, чем предыдущие варианты. Требует для правильной работы подключение модуля mod_rewrite на хостинге (обычно всегда включен). Часто этот метод используют для переадресации страниц с www на такие же без www и обратно. Рассмотрим их:

    Редирект домена с www на не-www
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)
    RewriteRule ^(.*)$ http://%1/$1

    Редирект с не-www на домен с www
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.(.*)
    RewriteRule ^(.*)$ http://www.%1/$1

    301 редирект с домена на домен и исключением для ссылки /market/vm2_market.xml. Т.е. все запросы (кроме /market/vm2_market.xml), со старого домена на новый будут выполняться.

    RewriteEngine on

    301 Все запросы (кроме /market/vm2_market.xml и ссылки /texts (и всеми ее "подссылками")), со старого домена на новый будут выполняться. Также здесь работает правило переадресации определенной подссылки (RedirectMatch 301)

    RewriteEngine on
    RedirectMatch 301 ^/texts/data/msg/(.*)\.png$ http://olddomen.ru/texts/data/rimage/msg.php?id=$1
    RewriteCond %{REQUEST_URI} !^/texts*
    RewriteCond %{REQUEST_URI} !^/market/vm2_market.xml$
    RewriteRule ^(.*)$ http://newdomen.ru/$1

    RedirectMatch 301 - еще один хороший метод редиректа, он похож на Redirect 301, но имеет больший функционал. А именно, с его помощью можно делать редиректы на основе регулярных выражений.

    Примеры:
    RedirectMatch 301 ^/olddirectory/ http://сайт/newdirectory/
    (Здесь переадресует всю директорию на новую)

    RedirectMatch 301 ^(.*)$ http://сайт
    (Переадресует все страницы со старого домена на новый с помощью 301 редиректа (вес также передается на новый сайт))

    RedirectMatch 301 (.*)\..php
    (Смена страниц с html расширения на php расширение)

    RedirectMatch 301 /dirA/(.*)\..php
    (Запускает перенаправление из директории dirA в директорию dirB только при обращении к PHP скриптам.
    .php -> http://сайт/dirB/page.php - сработает
    http://сайт/dirB/page.html - не сработает)

    Синтаксис для регулярных выражений
    . - Точка заменяет произвольный символ.
    - обозначает перечень символов, совпадающих с буквами a, b, или с.
    [^abc] - перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
    * - означает, что предшествующий символ может повторяться (0 или более раз).
    * - команда найдёт идущие подряд символы из заданного набора.
    [^abc]* - с точностью до наоборот.

    .* - заменяет абсолютно любой набор символов. ".*" - найдёт все подстроки между кавычками.
    ^ - начало строки (в том случае, если используется в начале выражения).
    $ - обозначает конец строки.

    \w - буква, цифра или подчёркивание _.
    \d - заменяет любую цифру.
    \D - заменяет любой символ, но не цифру.
    - заменяет любую цифру.
    - любая буква от a до z (весь латинский набор символов) в нижнем регистре.
    - любая буква от A до Z в ВЕРХНЕМ регистре.
    - любая буква от a до Z в любом регистре.
    - то же самое.

    Спецсимволы, используемые в правилах и их значения.
    ^ - спецсимвол начала строки;
    $ - спецсимвол конца строки;
    ! - спецсимвол отрицания;
    . - точка, заменяет любой символ, но только один;
    () - группировка;
    \ - «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

    Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
    ? - символ повторяется 0 или 1 раз.
    + - повторяется от 1 до 65536 раз.
    * - повторяется от 0 до 65536 раз.

    Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем или .
    NC - флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
    R - флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
    L - флаг Last, останавливает формирования URL-адреса и строка считается окончательной.

    Редирект через php. Если у вас обычная php страница, которую надо переадресовать на новый адрес, то можно обойтись без.htaccess

    Пример:

    Редирект через javascript. Также переадресацию можно сделать и на обычном javascript (правда без передачи веса страницы).

    Пример:
    window.location="http://сайт/category/";
    (обычная переадресация на страницу сайта)
    alert("Сейчас вы будете переадресованы!"); window.location="http://сайт/category/";
    (обычная переадресация на страницу сайта перед которой пользователю выводится сообщение)

    Здравствуйте, уважаемые друзья и гости блога сайт! Сейчас Вы узнаете как правильно делается на сайте 301 редирект htaccess и вообще, что такое редирект и зачем он нужен на ресурсе? Поехали …

    301 редирект — это код статуса ресурса, который возникает на нем при переадресации на другой сайт и отправляется клиенту, т.е. браузеру.

    Для чего это нужно? Вообще переадресация пользователя с одного адреса страницы сайта на другой необходима при переезде сайта на новый адрес или при изменении адреса поста на сайте и в разных подобных ситуациях возникающих по каким-то обстоятельствам.

    Например при переходе сайта с http на https . Об этом я писал ранее! Вот как раз для перевода сайта на https необходимо прописать в файле htaccess код редиректа, который будет указывать поисковым машинам, что ваш сайт находится теперь по адресу начинающегося с HTTPS. Вот этот код:

    • RewriteCond %{SERVER_PORT} !^443$
      RewriteRule ^(.*)$ https://site.ru/$1

    или можно вот так:

    • RewriteCond %{HTTPS} =on
      RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1

    А вообще-то видов редиректов существует масса, вот некоторые из них, которые считаются наиболее важными и востребованными среди вебмастеров …

    Виды 301 редиректов для вебмастера!

    301 редирект с www на без www (главное зеркало – домен без www)

    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ http://%1/$1

    301 редирект с без www на www (главное зеркало – домен с www)

    RewriteCond %{HTTP_HOST} ^([^www].*)$
    RewriteRule ^(.*)$ http://www.%1/$1

    301 редирект с одной страницы сайта на другую

    RewriteCond %{REQUEST_URI} ^/test/$
    RewriteRule ^.*$ http://site.ru/new-test/?

    Важно!

    Для устранения ошибки на сайте (возникновение дублей главной страницы!), необходимо в файл htaccess вашего сайта установить следующий код:

    RewriteCond %{THE_REQUEST} ^{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/
    RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1

    Тогда главная страница вашего сайта не будет доступна по нескольким адресам, так например: home.php,index.php, default.php и др. Соответственно злополучные дубли вашей главной страницы исчезнут и сайт поднимется в поисковой выдаче из-за исчезновения данной ошибки.

    Вот еще полезный сервис, который поможет Вам при создании анонимных редирект-ссылок для Вашего сайта: Katvin.com

    Вот собственно и все, что я хотел Вам сегодня рассказать. Спасибо за Ваше внимание! До новых встреч!

    Советы