Меню Закрыть

Управление конфигурацией сервера. Файл .htaccess в WordPress


.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. Существует ещё множество разновидностей задач, которые он способен решать.

 


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

         Яндекс.Метрика