Войти
mod_rewrite 10+ правил которые нужно знать
16.06.2010 | Кат. Полезные заметки | 1261
Для веб-сервера Apache существует мощный модуль mod_rewrite, который включается в стандартный дистрибутив. Данный модуль позволяет выполнять на лету URL преобразования. Механизм преобразования основывается на использовании правил, а правила в свою очередь представляют из себя регулярные выражения.

Модуль mod_rewrite поддерживает неограниченное количество правил и связанных с каждым правилом условий, реализуя действительно гибкий и мощный механизм управления URL.

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

Модуль оперирует с полными URL (включая path-info) и в контексте сервера (httpd.conf) и в контексте каталога (.htaccess) и даже может генерировать части строки запроса в качестве результата.

И у всей этой функциональности и гибкости есть свой недостаток — сложность. Но вот несколько основных правил желательно знать.

Куда нужно вписывать правила

Все правила необходимо вписывать в файл .htaccess. Обычно этот файл располагается в корневом каталоге. Но можно для разных каталогов использовать разные файлы .htaccess.
Также помните, что правила для модуля необходимо вписывать с учётом регистра.
Включаем mod_rewrite

Для включения модуля необходимо в начале файла поместить следующий код
RewriteEngine on

Это правило должно присутствовать в начале любого файла .htaccess, иначе все остальные правила просто не будут работать.

Основной шаблон правил

Основным форматом для правил mod_rewrite является следующий шаблон:
RewriteRule Pattern Substitution [Flag(s)]
URL всегда относительные

URL перенаправления всегда относительный к каталогу в которому расположен ваш .htaccess.
Если файл в корневом каталоге, URL относительны к корневому каталогу, если в подкаталоге — значить и URL относительны к подкаталогу.

Основное перенаправление

Если вам нужно создать простое перенаправление (301) с одного на другой URL, используйте для этого следующий код:
RewriteRule ^fileone.html$ filetwo.html

Это самое простое правило, которое на запрос fileone.html перенаправит на filetwo.html
Адрес без “www”

Этот код позволит вашим посетителям не заморачиваться с вводом приставки www

RewriteCond %{HTTP_HOST} !^domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Запрет доступа для определённого IP-адреса

Для того что бы запретить доступ к сайту для определенного айпишника, юзаем следующее правило
RewriteCond %{REMOTE_ADDR} ^(A.B.C.D)$
RewriteRule ^/* http://www.domain.com/sorry.html [L]

Заменить A . Б . C . D с IP адрес, который вы хотите блокировать (не забудьте оставить обратный слеш «» перед каждой точке, он выступает в роли экранирующего символа).
Запрет доступа для определенных User Agents

Если нужно заблокировать доступ для определённых посетителей, например поисковые боты, тогда вам на помощь придет следующая запись
RewriteCond %{HTTP_USER_AGENT} UserAgent
RewriteRule .* - [F,L]

Вместо “UserAgent” указываем нужное значение. Если хотите запретить больше чем одному, используйте оператора [OR]
RewriteCond %{HTTP_USER_AGENT} UserAgentA [OR]
RewriteCond %{HTTP_USER_AGENT} UserAgentB

Вы можете указать столько UserAgent сколько пожелаете, главное убедитесь, что в конце каждой строки стоит [OR] (естественно для последнего не нужно указывать).

Чистим строку запроса

Допустим, все страницы на вашем сайте, кроме домашней страницы, выглядят следующим образом

http://www.domain.com/home.html?example=12345abcd

Вместо имени страницы идет строка запроса.
Это не очень красиво, и вдобавок поисковики будут показывать кучу дублей домашней страницы. Что бы избавиться от строки запроса в URL-адреса страниц, используйте следующий код:
RewriteCond %{QUERY_STRING} example=
RewriteRule (.*) http://www.domain.com/$1? [R=301]

Этим правилом мы не только избавимся от строки запроса, но стоящего перед ней знака вопроса.

Защита от прямых ссылок
Некоторые недобросовестные сайтовладельцы не желая утруждать себя наполнение сайт, подчистую копируют содержимое. И хоть текст располагается на их сайт, то ссылки на картинку остаются прежними. И таким образом тырят еще и пропускную способность. Следующий код позволяет это предотвратить:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com/ .*$ [NC]
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

Только убедитесь, что изменили “domain.com” на свой домен

Сервисная страница

Если вам необходимо отключить свой сайт на некоторое время для технических работ, можно перенаправить всех посетителей на соответствующую страницу сообщающую, что ваш сайт закрыт на технический перерыв.
RedirectMatch 302 ^/ /maintenancepage.html

Вместо «maintenancepage.html» укажите путь где находится ваша Сервисная страница.

Перенаправляем несколько доменов на один домен

Если ваш сайт может быть доступен с нескольких доменов, имеет смысл сделать редирект на какой-то один, что бы для поисковиков не было дублирования содержания. Используем следующий код для исправления ситуации
RewriteCond %{HTTP_HOST} ^www.domain.net$ [NC,OR]
RewriteCond %{HTTP_HOST} ^domain.net$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain.net$ [NC]
RewriteRule ^(.*)$ http://domain.net/$1 [R=301,L]

У файлов приоритет выше

При написании правил учитывайте, что файлы приоритетней чем перенаправления. Например если у вас есть каталог с именем “services”, и в этом каталоге лежит файл “design.html”, у вас не получится перенаправить файл “http://domain.com/services”. Потому что аpache наталкивается на каталог “services” и не видит перенаправляющую инструкцию.
Это можно исправить просто переименовать директорию (например добавить подчёркивание в начале или в конце).

Стоит запомнить:

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

Вольный перевод статьи с noupe.com

  • Варианты дизайна потолков из гипсокартона

    Когда начинаешь ремонт, очень трудно представить конечный вид своей квартиры. Да и многие детали по ходу ремонта нужно постоянно додумывать. В этих случаях блудишь просторами интернета и пачками пересматриваешь фото…

  • ПО ТУ СТОРОНУ РЕАЛЬНОСТИ
    ПО ТУ СТОРОНУ РЕАЛЬНОСТИ

    Лет семь назад со мной произошел странный случай, давший возможность заглянуть за тонкую грань, которая отделяет наш мир от другого - Неведомого:Мы сидели перед танцующим в печурке огнем, допивали крепкий чай и мирно…

  • Рецепт приготовления СУШИ

    Необходимые предметы и продукты Чтоб сделать суши назовем его сет Филадельфия, конечно же, можно, не парится, и заказать доставку суши, но интереснее всё же научится и сделать самому, итак нам понадобится: Рис, Рисовый…

  • Мебель домашнего уюта

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

  • поздравления к 23 февраля (стр.2)

    Кто б нежными дарил нас именами?И нас берег, когда бы не они?Кто б воспевал? Кто б разжигал в нас пламя,В котором мы сгораем от любви?Кто заслонил бы крепкими плечами?Кто в битвах кровью заплатил своей,Чтоб наши…

  • О САМОМ СОКРОВЕННОМ

    Наступили новые времена, и теперь об интимной жизни как и о прогнозе погоды можно узнать достаточно много. Телепередачи, книги, видеофильмы дают исчерпывающую информацию по всем интересующим вопросам. Поэтому,…

  • Мужские Имена на букву М

    МАЙМай - редкое имя, означающее: теплое сердце. Как правило, это люди необыкновенно большого терпения. Очень сосредоточенны и всегда доводят до конца начатое. Внешне похожи на мать. Часто рождаются в семье священников.…

  • РЕБЕНОК СТРОИТ СЕБЯ САМ

    Так считала итальянский врач Мария Монтессори и ее последователи. Когда первая итальянская женщина-врач Мария Монтессори решила заняться педагогикой, в мире уже был провозглашен век ребенка. Это означало, что…

  • Как выбрать мужские часы?

    Часы в настоящее время рассматриваются в качестве интересного гаджета, который служит в качестве дополнительного ювелирного изделия, а также когда дело доходит до времени. Часы так  же рассматриваются как мера…

  • Что делать если насосная станция стала часто включаться?

    Как мы знаем, на свете нет ничего вечного. Поэтому, когда вы сталкиваетесь с такой ситуацией, когда насосная станция включается чтобы набрать давление в накопительном баке, а давление не увеличивается, одной из причин…


Комментарии

77 + 6 =