Красивые адреса страниц, так называемые ЧПУ — это не только стильно, но это еще и интуитивно понятная «фича» вашего сайта. Как сделать Человеко понятные 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++