Меню Закрыть

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

 

Материалы по теме:

Распределение ролей пользователей на сайте WordPress
В административной панели Wordpress при переходе по ссылке с названием «Пользователи» переходим на одноименную страницу.
Ошибка обновления. Сайт ненадолго закрыт на техническое обслуживание. Зайдите через минуту.
«Сайт ненадолго закрыт на техническое обслуживание. Зайдите через минуту». Такая запись (заглушка) появляется на сайте в момент различного рода (автоматических или ручных) обновлений, например, ...
Сокрытие части контента в статье с плагином BBSpoiler
Плагин позволяет скрыть часть контента (текст, картинки, блоки картинок, видео, а так же комбинации всего перечисленного) под тегами и открыть по требованию пользователя.
Установка на WordPress комментариев от Disqus и SV Kament
В движке WordPress, как известно, есть штатная система комментариев. Она наделена многими прекрасными качествами и обладает набором неоспоримых достоинств.

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

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

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