10+ правил Mod_Rewrite, которые вы должны знать

10+ правил Mod_Rewrite, которые вы должны знать
Mod_rewrite — это механизм перезаписи на основе Apache для динамической перезаписи URL-адресов. Он изначально встроен в серверы Apache, хотя и не включен по умолчанию.

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


Правила Mod_Rewrite, которые вы должны знать

Включить Mod_Rewrite

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

RewriteEngine on

(Не забывайте, что команды .htaccess чувствительны к регистру.) Этот код нужно вводить в начале любого файла .htaccess с помощью mod_rewrite.

Базовый макет Mod_Rewrite

Основной формат команды 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-адрес

Если вы хотите заблокировать доступ к вашему веб-сайту кому-либо, пришедшему с определенного IP-адреса, вы можете использовать следующий код:

RewriteCond %{REMOTE_ADDR} ^(A.B.C.D)$
RewriteRule ^/* http://www.domain.com/sorry.html [L]

Замените ABCD на IP-адрес, который вы хотите заблокировать (не забудьте оставить «» перед каждой точкой, которая экранирует символ).

Блокировать определенные пользовательские агенты

Если вы хотите заблокировать группу IP-адресов с помощью одного и того же пользовательского агента (бота), сделайте это с помощью следующего кода:

RewriteCond %{HTTP_USER_AGENT} UserAgent
RewriteRule .* - [F,L]

Просто замените бит «UserAgent» любым пользовательским агентом, который вы хотите заблокировать. Вы также можете заблокировать более одного за раз, заменив верхнюю строку в этом коде на что-то вроде этого:

RewriteCond %{HTTP_USER_AGENT} UserAgentA [OR]
RewriteCond %{HTTP_USER_AGENT} UserAgentB

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

Разделить строки запроса

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

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

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

RewriteCond %{QUERY_STRING} example=
RewriteRule (.*) http://www.domain.com/$1? [R=301]

Это не только избавляет от строки запроса, но и предшествующего вопросительного знака.

Настроить изображение по умолчанию

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^images/.*.jpg$ /images/default.jpg [L]

Конечно, вы можете изменить бит «.jpg» на любой тип файла, который вы используете. Убедитесь, что у вас есть изображение с именем «default.jpg», или измените его на любое имя файла изображения по умолчанию.

Предотвратить хотлинкинг

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

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]

Помните, что файловая система всегда имеет приоритет

Файловая система на вашем сервере всегда будет иметь приоритет над переписанным URL-адресом. Например, если у вас есть каталог с именем «services» и в этом каталоге находится файл с именем «design.html», вы не можете перенаправить URL-адрес на «http://domain.com/services». Что происходит, так это то, что Apache заходит в каталог «services» и не видит инструкций по перезаписи.

Чтобы исправить это, просто переименуйте каталог (простой способ сделать это — добавить символ подчеркивания в начало или конец).

Помнить:

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

Дополнительные ресурсы:

  • Modrewrite.com — отличный сайт с форумом, руководством для начинающих и ссылками на дополнительную информацию о mod_rewrite.
  • Mod_Rewrite Tips and Tricks — отличная статья об основах mod_rewrite и некоторых методах для начинающих и продвинутых.
  • Mod Rewrite Tips and Tricks — Этот сайт предлагает несколько основных советов по mod_rewrite.
  • Памятка Apache Mod_Rewrite — эта памятка содержит информацию о наиболее часто используемых элементах для построения шаблона mod_rewrite.
  • Изучите Apache mod_rewrite: 13 реальных примеров — это гораздо более продвинутая статья от SitePoint.
  • Модуль mod_rewrite URL Rewriting Engine — Официальная документация от Apache.
  • .htaccess Rewrite Советы по использованию RewriteRule и RewriteCond для .htaccess mod_rewrite — отличное руководство по ряду различных шаблонов mod_rewrite.
  • Совет по настройке Apache Mod_Rewrite — пять отличных советов по настройке mod_rewrite.
  • Несколько приемов Mod_Rewrite для улучшения веб-приложения — охватывает ряд основных и более сложных приемов mod_rewrite.

Автор: Кэмерон Чепмен

Кэмерон Чепмен — писатель, блогер, редактор и любитель социальных сетей. Она занимается дизайном более шести лет и пишет всю свою жизнь. Если вы хотите связаться с ней, вы можете подписаться на нее в Твиттер или на ее Личном сайте.

Пишите для нас! Мы ищем интересные и креативные статьи, если вы хотите внести свой вклад, просто отправьте нам электронное письмо.