Краткое руководство по htaccess и mod_rewrite
считается чем-то недостижимым среди многих разочаровавшихся веб-мастеров, однако это одна из наиболее сложных задач, с которыми встречаются практически все веб-разработчики.
Хочу предложить вам простое решение вместо поиска более сложных для того, чтобы понять как работают mod_rewrite и htaccess. Большинство примеров использования, приведённые в этой статье могут быть просто скопированы и выгружены на ваш веб-сервер.
Чтобы не повторять одно и то же сотням других вебмастеров, я решил просто создать эту страницу-подсказку для всеобщего пользования.
Повторюсь, htaccess – это конфигурационный файл, который позволяет управлять веб-сервером Apache, mod_rewrite – это движок перезаписи, с помощью которого веб-сервер может модифицировать URL при их загрузке.
Файл htaccess – это текстовый файл, который имеет название .htaccess. Можно даже сказать, что это файл, состоящий только из расширения, потому как не содержит именной части (до символа «точка»). Обычно этот файл расположен в основной корневой директории вашего сервера, но вы также можете создавать отдельные файлы htaccess для различных директорий на своем сайте.
Канонизация
Самая простейший пример – сделать так, чтобы сайт не содержал ошибок канонизации для домашней страницы.
Множество веб-мастеров страдают от не очень хорошего ранжирования в поисковых системах из-за того, что существуют несколько версий URL домашней страницы, например:
http://www.site.com
http://site.com
http://www.site.com/index.html
http://site.com/index.html
Эти страницы выглядят как различные URL, несмотря на то, что они указывают на одно и то же содержание. Google в конечном итоге решит, какая из версий более правильная, но может пройти немало времени, а вы за это время можете поиметь лишние проблемы.
Чтобы решить эту проблему, просто добавьте следующие строки в свой htaccess-файл:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.com
RewriteRule (.*) http://www.site.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.site.com/ [R=301,L]
Данный код позволит перенаправлять все возможные варианты домашней страницы на http://www.site.com.
Превращение файлов HTML в PHP
Иногда вам необходимо использовать PHP-код на HTML-страницах статического сайта. Вместо того, чтобы перенаправлять все свои HTML-страницы на их эквивалентные PHP-версии, вам просто необходимо «сказать» своему серверу, что он должен парсить HTML-файлы как PHP.
AddHandler application/x-httpd-php .html
Данный код работает с любыми файлами, поэтому, если вы захотите создать динамические XML- или ASP-файлы, которые будут вести себя как PHP-файлы, вам просто нужно внести следующие изменения:
AddHandler application/x-httpd-php .xml
AddHandler application/x-httpd-php .asp
Страницы ошибок
Пользовательские страницы ошибок могут быть легко настроены, например в CPanel (или DirectAdmin), но, если вы захотите настроить страницу ошибки через htaccess-файл, добавьте в него следующую строку:
# Обработка ошики 404 - Файл не найден
ErrorDocument 404 http://www.site.com/404.php
# Обработка ошики 403 - Доступ запрещен
ErrorDocument 403 http://www.site.com/403.php
Индексация директорий
Чтобы запретить роботу Google индексировать директории вы должны определить индексную страницу для необходимых директорий. Это не является обязательным на некоторых серверах.
DirectoryIndex index.php3
Я предпочитаю делать перенаправление на индексную страницу директории или другую подходящую страницу. Например, www.site.com/images/ может быть перенаправлен на www.site.com, а www.site.com/forum/ может быть перенаправлен на www.site.com/forum/index.php
Перенаправляющие страницы
Отличный пример использования htaccess для перенаправления одной страницы на другую:
redirect 301 /old-page.php http://www.site.com/new-page.php
Перенаправление вашего фида на Feedburner
Если вы хотите переключить ваш фид на сервис Feedburner, вам необходимо будет перенаправить свой текущий фид на новый адрес http://feeds.feedburner.com/blog-feed.
Перенаправление должно применяться для всех посетителей кроме робота Feedburner:
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^ваш-фид\.xml$ http://feeds.feedburner.com/blog-feed [R,L]
Улучшенная хотлинк-защита
Если вы хотите запретить другим веб-сайтам напрямую ссылаться на изображения, расположенные на вашем сайте, но позволить поисковикам Google, Yahoo и MSN индексировать их, вам необходимо воспользоваться следующим кодом:
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 – это изображение, которое создано вами. Я предлагаю использовать что-то типа «Это изображение находится на сайте www.site.com» и ваш логотип.
Лично я разрешаю хотлинк, но использую определённое решение, которое использует сервис Google Images и сайты-хотлинкеры для получения ссылок на свой сайт.
Создание ЧПУ ссылок с помощью mod_rewrite
Модуль перезаписи Apache в основном используется для превращения динамических URL вида www.site.com/product.php?id=123 в статические и дружественные пользователю вида www.site.com/product/123.
RewriteEngine on
RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]
Еще один пример, который приводит URL:
www.yoursite.com/script.php?product=123 к виду www.yoursite.com/cat/product/123/
RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
Удаление строк запросов
Некоторые сайты ссылаются на ваш, добавляя строку запроса. Например, можно сослаться на ваш сайт, используя эту ссылку http://www.site.com/index.php?source=seoblog, просто для того, чтобы знать откуда приходит трафик. Это становится причиной появления дублирующегося содержания для вашего сайта, поэтому вам нужно настроить перенаправление на вашу домашнюю страницу:
RewriteCond %{QUERY_STRING} ^source= RewriteRule (.*) /$1? [R=301,L]
Пока все. Если есть, что добавить, прошу в каменты…