Директивы перенаправления .htaccess
  • Категории
  • Подписка
  • Разместить статью
23/05/10 12 8807 Настройка файла .htaccess
-

Директивы перенаправления .htaccess

Иногда просто необходимо осуществлять редирект страниц сайта, в случае смены доменного имени сайта, либо ещё возможен вариант, когда редирект применяется для добавления в конце ссылки слэша – косой черты «/». Так вот для таких целей можно использовать файл .htaccess. Но это очень неудобно, если Ваш сайт имеет от 100 и выше страниц, на это есть другие методы.

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

Redirect / http://www.example.com

# http://www.example.com — URL  на который мы перенаправляем запросы

более сложный пример, мы хотим определенные страницы нашего сайта переадресовывать на другие сайты:

Redirect http://mysite.ru/linux http://www.linux.org

Redirect /linux/download.html http://www.linux.org/dist/download_info.html

Redirect 301 /kernel http://www.linux.org

теперь при наборе http://mysite.ru/linux будут открываться http://www.linux.org. В последнем примере WEB сервер будет передавать код 301, что означает «документ перемещен постоянно».

Синтаксис команды Redirect выглядит следующим образом:

Redirect [status] URL_LOCAL URL_REDIRECT

status : необязательное поле, определяет код возврата, допустимые значения:

* permanent (301 — документ перемещен постоянно)

* temp (302 — документ перемещен временно)

* seeother (303 — смотрите другой)

* gone (410 — убран)

URL_LOCAL : локальная часть URL запрашиваемого документа.

URL_REDIRECT : URL куда должен быть выполнен редирект.

RedirectMatch

Директива RedirectMatch аналогична директиве Redirect за исключением того, что в RedirectMatch возможно использование регулярных выражений, что несомненно может быть удобно в некоторых условиях. Например для организации передачи параметров скрипту в теле URL.

RedirectMatch /(.*)/(.*)/index.html$ http://mysite.ru/script.php?par1=$1&par2=$2

Хотя данный пример и вызовет перезагрузку страницы в дальнейшем его можно будет улучшить. Здесь необходимо сделать небольшое лирическое отступление и поговорить о синтаксисе регулярных выражений.

В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение:

  1. Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
  2. Символ ^ обозначает начало строки.
  3. Символ $ обозначает конец строки.
  4. Символ . обозначает любой символ.
  5. Символ | обозначает альтернативу. Например, выражения «A|B» означают «A или B».
  6. Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
  7. Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
  8. Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
  9. Квадратные скобки [] используются для перечисления допустимых символов.
  10. Квадратные скобки [^] используются для перечисления недоступных символов.
  11. Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде.
  12. Все, что расположено после символа ‘#’, считается комментарием.

Это все основные примитивы с помощью которых можно построить любое регулярное выражение.

Редирект через .htaccess с использованием mod_rewrite

Этот метод работает в Apache c включенным mod_rewrite — модулем, который позволяет осуществлять ряд полезных функций. Например, преобразование ссылок вида http://site.com/index.php?module=news в более удобную и интуитивно понятную форму для обычного человека: http://site.com/news/. Благодаря ему, мы можем конфигурировать редирект под конкретно взятую ситуацию. Подробнее о возможностях mod_rewrite Вы можете прочитать здесь (http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html).

RewriteEngine on

RewriteBase/

GET /index.html HTTP/1.1

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

RewriteRule ^index\.php$ http://daxa.com.ua/news.php [R=301,L]

RewriteEngine on — включает механизм преобразования.

RewriteBase — простыми словами можно сформулировать так: RewriteBase указывает директорию преобразования. У нас это корневой каталог.

RewriteCond — в этой директиве мы указывает условие, в случае выполнения которого переходим к RewriteRule.

{THE_REQUEST} — строка HTTP-запроса

RewriteRule — задает правило преобразования URL. Здесь используются регулярные выражения.

[R=301,L] — флаг R указывает на редирект «301», L — останавливает процесс преобразования.

Помните, что редирект делают не только для посетителей Web-сайта, а и для поисковых роботов, от которых зависит рейтинг Вашего Интернет-портала в поисковых системах.


12 комментариев на «“Директивы перенаправления .htaccess”»

  1. А вы можете обьяснить зачем гасить .htaccess, когда ставишь ДЛЕ, а потом опять востанавливать?

  2. izia:

    Подробная статья, как раз нужно было сделать редирект.

  3. Большое спасибо, то что нужно! А то уже отчаился… везде какой-то бред был написан.

  4. я включаю музыку и все замечательно редактируется
    теперь перенаправление работает!

  5. Я вижу что ты разбираешься, вот хочу переадресовать
    Это
    http: // livelylife . ru/index.php?page=ru_%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F
    надо переадресовать в livelylife.ru страницы одинаковые хочу убрать копию
    для Аpach
    пробовал так не работает:
    RewriteEngine on
    RewriteBase /
    Redirect 301 /index.php?page=ru_%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F http:// livelylife . ru/
    мод Rewrite включен

    • carerakjan:

      если внимательнее почитать, то mod_rewrite подразумевает использование условий и правил.
      У вас немного не такой синтаксис, попробуйте так:
      RewriteEngine on
      RewriteRule ^/$ /index.php?page=ru_%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F [L]
      здесь при запросе ваш сайт/index.php?page=ru_%D0….. будет выдаватся главная станица сайта/

  6. LivelyLife:

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

  7. Лично мне, понравился этот коммент. Обязательно зайду ещё раз

  8. Всегда мучалась с перенаправлением с доменного имени без www на домен с www. обычно делала все это через хостинг, но там все както глючно и не с первого раза работало. Попробовала ваш метод, и вы занете, он намного лучше чем через хостинг, все моментально перенаправилось:) Вобщем спасибо!

  9. Спасибо за статью, разобралась наконец-то с редиректом 301, сделала с jlady.ru на www. jlady.ru , вроде бы все работает. Говорят так лучше.

  10. Отличная статья, хоть теперь стало понятно, для чего данный файлик нужен, и как правильно его исправить, теперь сделал себе редирект на www. А то постоянно приходилось через С-panel делать.

Добавить комментарий

Яндекс.Метрика