Автор: Патрик Элтофт
Перевод: Всеволод Козлов
Несмотря на то, что статей и руководств, освещающих .htaccess и mod_rewrite, в Сети, мягко говоря, немало, многие веб-мастера до сих пор испытывают нехватку знаний по этому вопросу. Многим из них просто непонятно то, что говорится в этих мануалах, т.к. там это все сложно для их понимания.
Я хорошенько подумал, как бы решить эту проблему, и решил, что сделаю руководство, состоящее из наглядных примеров решения основных проблем, связанных с .htaccess и mod_rewrite.
Не будем терять времени, приступаем!
Сперва давайте разберемся, что же такое файл .htaccess и mod_rewrite.
.htaccess – файл-конфигуратор Apache-серверов.
Mod_rewrite – модуль, используемый веб-серверами для преобразования URL’ов.
.htaccess представляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные .htaccess-файлы для различных директорий Вашего сайта.
Удаление дублей страниц
Простейший и в то же время чаще всего необходимый трюк – редирект дублей одной и той же страницы на основной ее адрес.
Яркий пример – главная страница любого сайта обычно доступна по 4-ем адресам:
- http://www.site.ru/
- http://site.ru/
- http://www.site.ru/index.html
- http://site.ru/index.html
Каждый из перечисленных выше вариантов распознается поисковыми системами как самостоятельная страница, отсюда идет дублирование контента одной и той же страницы по нескольким адресам, что не есть хорошо.
Решение этой проблемы предельно простое и выглядит так:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.ru
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.ru/ [R=301,L]
Таким образом, мы получим редирект всех страниц-дублей на http://www.site.ru/
Меняем расширение html на php
Иногда бывает так, что у Вас статичный веб-сайт, а Вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого Вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл.
AddHandler application/x-httpd-php .html
Этот прием можно использовать и для других расширений файлов:
AddHandler application/x-httpd-php .xml
AddHandler application/x-httpd-php .asp
Задаем собственные страницы ошибок
О необходимости создания собственной страницы ошибок я уже неоднократно рассказывал:
- Ошибка 404. Как удержать посетителя на сайте?
- 11 необычных, прикольных и смешных собственных страниц ошибки 404
- 24 креативные, эффектные, дружественные, функциональные и юзабельные страницы ошибки 404
- 40 креативных и визуально неотразимых собственных страниц ошибки 404
Задать же собственную страницу ошибок можно следующим образом:
ErrorDocument 404 http://www.site.ru/404.php
Индексация директорий и поддиректорий
Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать такую строку, к примеру:
DirectoryIndex index.php3
Лично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.site.ru/images/ можно переадресовать на www.site.ru, а www.site.ru/forum/ на www.site.ru/forum/index.php.
Переадресация страниц
Простое правило, позволяющее переадресовывать с одной страницы на другую:
redirect 301 /old-page.php http://www.site.ru/new-page.php
Переадресация Вашего фида на Feedburner
Если Вы хотите, чтобы на Ваш RSS-фид подписывались через Feedburner, то используйте следующий код:
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^your-feed\.xml$ http://feeds.feedburner.com/your-feed [R,L]
Защита изображений от скачивания
Очень часто бывает, что веб-мастера нагло копируют контент с Вашего сайта вместе с рисунками, причем рисунки подгружаются с Вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем. Как же защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения? Все просто:
RewriteEngine on
RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)?site\. [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{REQUEST_URI} !^/hotlinker\.gif$
RewriteRule \.(gif|jpg|png)$ /hotlinker.gif [NC,L]
hotlinker.gif – изображение, которое будет отображаться у нерадивых веб-мастеров, вместо истинных изображений. Рекомендую в этом изображении отобразить Ваш логотип и ссылку на Ваш сайт.
Создание ЧПУ (человеко-понятных урлов) с помощью mod_rewrite
C его помощью можно преобразовать, например, www.site.ru/product.php?id=123 в www.site.ru/product/123 следующим образом:
RewriteEngine on
RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]
В другом примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/:
RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
Избавляемся от QUERY_STRING
Некоторые веб-мастера делают ссылки вида www.site.ru/index.php?source=blogstorm, чтобы знать, откуда идут посетители. Из-за этого появляется дублированный контент, от которого надо избавляться:
RewriteCond %{QUERY_STRING} ^source= RewriteRule (.*) /$1? [R=301,L]
Полезные материалы по теме
Оригинал статьи: Ultimate Guide to htaccess and mod_rewrite