8 mod_rewrite правил которые надо знать

Красивые адреса страниц, так называемые ЧПУ — это не только стильно, но это еще и интуитивно понятная «фича» вашего сайта. Как сделать Человеко понятные url я уже писал. Теперь немного расскажу о самом синтаксисе файла .htaccess.

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

Включаем mod_rewrite.

RewriteEngine on

Базовый синтаксис для mod_rewrite выглядит так.

RewriteRule УСЛОВИЕ РЕШЕНИЕ [Flag(s)]

Перенаправление на другую страницу. Для использования перенаправления со статусом 301 используем следующую конструкцию.

RewriteRule ^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]

Обратите внимание, что перед точками стоят слеши — они обязательны.
Блокирование пользователя по UserAgent. Если при атаке на ваш сайт «бот» использует разные IP, то вышеописанный способ не подойдет — пробуем заблокировать по UserAgent.

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

Также вы можете указать несколько агентов, доступ которых на сайт вы желаете перекрыть:

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

Избавляемся от нежелательной строки запроса. Допустим, у вас сделано так, что к домашней странице не может идти никаких запросов, но кто-то, или вы сами понаставляли ссылок с параметром, например, добавив в url вашей главной страницы ненужный параметр ?p=1. Для вас, как для пользователя, эта страница идентична той, что и без параметра, а вот у поисковика другой взгляд. По спецификации это другая страница. Избавляемся от этого так:

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

Устанавливаем картинку по умолчанию. На случай если картинка где-то потерялась и не может быть отображена, из-за чего может поехать дизайн, отображаем какую-нибудь другую, например с эмблемой любимого футбольного клуба :). Здесь принято за папку с картинками — images, можете поставить свою.

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

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

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.com/ .*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ /kukish.jpg [R=302,L]

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

RedirectMatch 302 ^/ /maintenancepage.html

О чем стоит помнить еще:

  • Команды mod_rewrite чувствительны к регистру
  • Файл с командами должен быть в unix-кодировке. Для редактирования и создания файлов .htaccess отлично подходит Notepad++