.htaccess — служебный файл настроек сервера Apache (точка вначале обязательна). Он позволяет задавать большое количество параметров работы web-сервера в отдельных папках (каталогах). А это значит, что можно управлять поведением сервера в каждой отдельной папке. Если .htaccess находится в корневой папке сайта, он оказывает влияние на все каталоги и подкаталоги сайта, исключая те папки, в которых имеется свой файл .htaccess, задающий иные параметры.
Несколько примеров использования файла .htaccess
Почему несколько? Потому, что вариантов внесения изменений в данный файл очень много, некоторые из них необходимы и полезны, а без других можно легко обойтись или заменить их использованием скриптов и плагинов. Поэтому здесь я представлю варианты внесения дополнений, которые использую на своем сайте, так сказать проверенные и «испытанные на себе». Во вновь установленном WordPress файл .htaccess в корневой папке сайта по умолчанию имеет следующий вид:
# BEGIN WordPress # <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress #
Так как web — сервер Apache допускает конфигурирование на уровне отдельных каталогов при помощи этого файла, рассмотрим внесение возможных изменений и дополнений в .htaccess, которые доступны web — разработчикам. Дополнительные коды можно вставлять в файл .htaccess, начиная с новой строки. Можно применять описание, закомментировав его, например с помощью символа #
Прежде, чем делать изменения в файле .htaccess, сохраните резервную копию оригинала на случай внесения некорректных данных.
Задание кодировки файлов на сервере
При помощи этой записи можно задавать кодировку в отдельных директориях (папках и подпапках), отличную от основной кодировки сайта. Например, сайт имеет кодировку utf-8, а Вы скачали скрипт гостевой книги в кодировке windows-1251 и если Вы закачаете папку с гостевой книгой в корневую директорию своего сайта, при попытке её просмотра, браузер выдаст Вам так называемые «кракозябры». Но, если внутри папки с гостевой книгой поместить файл .htaccess с принудительной кодировкой windows-1251, всё станет на свои места. И не нужно пытаться перекодировать скрипты или что-то ещё выдумывать. Ваш установленный скрипт заработает корректно. Кодировка в файле .htaccess записывается следующим образом:
# принудительная кодировка windows-1251 # AddDefaultCharset windows-1251
# принудительная кодировка UTF-8 # AddDefaultCharset UTF-8
Блокировка хотлинков с других сайтов
Хотлинк (hotlink) — включение в web-страницу файлов изображений или других ресурсов с чужого сервера. То есть, представьте себе ситуацию, что нашелся человек, один, два, а при хорошей посещаемости сайта, может быть и сотни, которые будут использовать ваши ссылки на изображения, экономя собственный трафик. Картинки будут появляться на их сайтах, но грузиться будут, соответственно, с вашего. Это создаст большую нагрузку на сервер и, как следствие, замедлит работу вашего сайта. Для предотвращения такого безобразия, используем этот код:
# защита изображений на сайте # RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?site.ru/.*$ [NC] RewriteRule \.(gif|jpg|jpeg|png|js|css)$ - [F]
Здесь вместо домена site.ru впишите название своего. Синим цветом я выделил расширения файлов изображений, скриптов и css. Как видите, даже последние можно таким образом защищать.
Примерно такая же запись кода появится в вашем файле .htaccess после установки плагина WP Hotlink Protection. Этот плагин служит для защиты изображений вашего сайта от хотлинка. Выбирайте, что Вам по душе — либо установите код вручную, либо поставьте плагин, но, понятно, что не нужно делать и то и другое одновременно.
Запрет доступа к файлу wp-config.php
Если в .htaccess будет этот код, то при попытке открыть файл wp-config.php браузер выдаст сообщение: «Ошибка 403. Доступ запрещен». Для защиты файла wp-config.php примените следующий код:
# защита wp-config.php # <files wp-config.php> order allow,deny deny from all </files>
Защита самого файла .htaccess
Как ни странно, но можно сделать и такой «ход конём»:
# защита самого файла .htaccess # <Files ~ "^.*\.([Hh][Tt][Aa])"> order allow,deny deny from all satisfy all </Files>
Запрет доступа к определенным файлам
Файлы js и css мы уже защищали в хотлинке картинок, но, можно сделать и таким образом:
# запрещаем доступ к файлам плагина css и js # <Files ~ "\.(js|css)$"> order allow,deny allow from all </Files>
301 редирект для слияния страниц с www и без (склейка домена)
Немного о зеркалах – может случиться так, что ваш сайт будет доступен по адресам https://www.site.ru и https://site.ru – это все классические ошибки, которые нельзя допускать, и в их решении как раз участвует 301 редирект. Необходимо определиться с главным зеркалом (с www или без www). В Яндексе: Вебмастер → мои сайты → выбрать сайт → Настройка индексирования → Главное зеркало. Далее можно увидеть сообщение:
В Google: Вебмастер → выбираем сайт → Настройки (изображение шестереночки, справа вверху) → Настройки сайта. Выбираем предпочтительный вариант:
Сейчас мы сделали правильные настройки в панелях web-мастера Яндекса и Гугла. Далее необходимо в файле robots.txt прописать директиву Host, где тоже указать сайт с www или без www. Например: Host: www.site.ru.
Теперь, чтобы поисковики один и тот же сайт не считали дублированным, нужно определиться с адресом сайта. Если выразится более просто, то сайт должен быть доступен только по одному адресу, т.е. либо с www, либо без www. Нам нужно настроить редиректы на основное зеркало. Приведу пример с доменом site.ru.
Если домен www.site.ru признан главным зеркалом, вставляем этот код:
# главным доменом будет с www # Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^site.ru\.ru$ [NC] RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]
Если домен site.ru признан главным зеркалом, применим такой код:
# главным доменом будет без www # Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC] RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
Здесь так же вместо домена site.ru впишите название своего домена.
Если брать за пример файл .htaccess с моего сайта, то на этом можно закончить, так как у меня в нем больше ничего нет. Вопрос кеширования решается с помощью плагина WP Super Cache, вопрос успешной защиты от ботов решает плагин All In One SEO Pack, от спама в комментариях защищает плагин Akismet. Можно, конечно, все это делать и через .htaccess. Смотрим другие примеры.
Кэширование файлов
Кэширование ускорит загрузку Вашего сайта. Для решения этой задачи можно воспользоваться модулем headers web-сервера Apache. Суть в этом случае сводится к тому, чтобы заставить браузер загрузить редкоизменяемые данные с сервера в локальный кэш всего один раз, а далее при заходе на сайт, использовать данные из кэша. Для включения кэширования добавляем код:
# Включаем кэширование файлов #
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Вы можете добавить новые или удалить некоторые типы файлов. Можно использовать max-age, чтобы указать время хранения ваших файлов в кэше в секундах.
Включение Gzip сжатия файлов
Можно сжимать все файлы сайта с помощью GZIP. Одним из лучших способов сжатия является использование модулей mod_deflate или mod_gzip. Они используются для автоматического сжатия всех файлов HTML, CSS, JavaScript и XML. В данном примере представлен более современный модуль mod_deflate:
# включаем сжатие данных Gzip # <IfModule mod_deflate.c> # force deflate for mangled headers # developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/ <IfModule mod_setenvif.c> <IfModule mod_headers.c> SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding </IfModule> </IfModule> # HTML, TXT, CSS, JavaScript, JSON, XML, HTC: <IfModule filter_module> FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no </IfModule> <IfModule !mod_filter.c> # Legacy versions of Apache AddOutputFilterByType DEFLATE text/html text/plain text/css application/json AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE text/xml application/xml text/x-component AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml AddOutputFilterByType DEFLATE application/atom+xml AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font-ttf font/opentype </IfModule> </IfModule>
Для проверки Gzip — сжатия, можно воспользоваться этим сервисом
//www.whatsmyip.org/http-compression-test/
Некоторые хостеры включают сжатие, только по запросу пользователей!
Блокировка по IP
Если нужно закрыть доступ к сайту определенному пользователю, например, за нарушение правил, Вы можете заблокировать его по IP адресу. Допускается массовая блокировка пользователей. Для добавления нового IP дублируйте строку deny from, заменяя IP адреса:
# блокируем пользователя по IP # order allow,deny allow from all deny from 192.168.0.1 deny from 123.45.6.7 deny from 012.34.5.
Также можно блокировать целую подсеть IP адресов 012.34.5. В примере не пишется последнее число, тем самым отсекается доступ для диапазона 012.34.5.0 — 012.34.5.255.
Запрет просмотра сайта определенными User-Agent
User-Agent — это любой браузер, программа или скрипт, которые способны просматривать ваш сайт. Кому-то из них Вы можете запретить эту процедуру. Полный список User-Agent можно посмотреть на сайте http://www.user-agents.org/
# Запрет доступа к сайту плохих User-Agent # SetEnvIfNoCase user-Agent ^FrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Java.* [NC,OR] SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR] SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR] SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR] SetEnvIfNoCase user-Agent ^Zeus [NC] <limit get="" post="" head=""> Order Allow,Deny Allow from all Deny from env=bad_bot </limit>
Здесь так же следует отметить, что блокирование нежелательных User-Agent может осуществлять плагин All inOne SEO Pack, в случае, если в настройках будет активирован Блокировщик вредных ботов. Здесь у Вас тоже есть право выбора.
Настройка редиректа с http на https
Это один из вариантов, которые используют для настройки редиректа для HTTPS протокола:
# редирект на https # RewriteCond %{HTTP:X-Forwarded-Protocol} !=https RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Вот такая подборка у меня получилась. Это не конечный перечень вариантов дополнений в файл .htaccess. Существует ещё множество разновидностей задач, которые он способен решать.