Как составить правильный .htaccess для WordPress

Оптимальный .htaccess для WordPressВ сети сложно найти универсальный .htaccess для WordPress, т.к. каждый блог настраивается под свою инфраструктуру — хостинг, пути и ссылки. Чаще всего можно встретить урезанные варианты, авторы которых либо не вникали в суть дела, либо не хотят отвечать на множественные вопросы в комментариях. Вам так или иначе придется немного вникнуть в его структуру и решить, что и как должно быть настроено именно для вашего блога.

Далее я постараюсь опишу свой .htaccess, чтобы на его базе вы могли создать свой собственный.

Для начала надо создать обычный текстовый файл и сохранить его с именем ".htaccess" (не забудьте создать резервную копию существующего файла, если таковой уже имеется в каталоге, где хостится блог). Далее мы будем его редактировать последовательно добавляя те или иные параметры. После очередного добавленного параметра, мы копируем его в каталог на сервере, где установлен WordPress и проверяем — всё ли осталось работоспособным, и, если нет — "откатываемся" обратно (удаляем этот параметр и думаем, почему это не сработало). Итак, поехали...

 Для начала надо защитить от внешнего доступа сам файл .htaccess, для этого добавляем в него такой код:

# Protect .htaccess
<files .htaccess>
order allow,deny
deny from all
</files>

Теперь содержимое этого файла нельзя будет получить и прочитать введя в браузере http://yoursite.com/.htaccess

Далее таким же образом защищаем wp-config.php:

# Protect wpconfig.php
<files wp-config.php>
order allow,deny
deny from all
</files>

Дальше можно (не обязательно) добавить условие(-я) блокировки доступа для конкретных IP адресов. Это может понадобиться, если вы знаете, к примеру, IP источника спама или откуда приходит нежелательный трафик.

# Who has access and who doesn't
order allow,deny
deny from 1.1.1.1
deny from 2.2.2.2
allow from all

Соответственно, "1.1.1.1" и "2.2.2.2" надо заменить на реальные IP адреса и вы можете добавлять или удалять строки "deny from" по мере необходимости. Для примера, я приведу реальный кусок, где я уже заблокировал много спамерских ресурсов, в том числе используя маски сетей (т.е. без указания одной последней или двух цифр IP адреса):

# Who has access and who doesn't
Order allow,deny
Deny from 46.118.158.247
Deny from 59.53.95.31
Deny from 61.158.161 61.158.162 61.158.163 61.158.165 61.158.167 61.158.168 61.158.169
Deny from 82.193.109
Deny from 91.231.40.27 91.231.40.28
Deny from 109.171.97.172
Deny from 117.21.224 117.21.225 117.21.226 117.21.227
Deny from 121.205.248.4
Deny from 176.195
Deny from 178.137
Deny from 192.162.19
Deny from 222.187.221 222.187.222 222.187.223
Allow from all

Обратите внимание, что адреса и маски можно указывать по несколько в одной строке, через пробел.

Теперь давайте скажем, чтобы сервер не показывал списки файлов (индексы) при запросах каталогов, например к каталогам с картинками, скриптами и т.п.

# Disable directory browsing
Options All -Indexes

Еще одна необязательная опция — перенаправление. Нужна в том случае, если вы переносили и/или меняли названия страниц или каталогов, после чего пользователи и поисковые системы их уже не видят на старых адресах.

Это нужно не только пользователям, но и для SEO, — чтобы поисковик не потерял ранее накопленный рейтинг данной страницы.

Будет выглядеть приблизительно так:

# Redirect old to new
Redirect 301 /old.php http://www.yourdomain.com/new.php

Общий синтаксис: Redirect код что куда

Код — это специальный код, который сервер возвращает в ответ на запрос, тут можете увидеть полный список статусных HTML кодов. К примеру, код 301 означает: "Перемещено на новое постоянное место".

Что — это может быть исходный путь с маской или отдельный файл.

Куда — собственно, куда оно было перемещено.

Теперь, для ускорения загрузки страниц в браузеры наших посетителей, пытаемся включить zlib компрессию. Её суть в том, чтобы передавать упакованные данные, занимающие меньший объем, а значит, за более короткое время. Будьте осторожны с этой командой, сразу же убедитесь в том, что она работает и дает какой-то эффект. В противном случае, лучше удалите или закомментируйте.

# php compression - use with caution
php_value zlib.output_compression 16386

С техническими деталями разобрались, теперь переходим к контенту. Определяем кодировку.

# Encoding
AddDefaultCharset utf-8

Добавляем mime тип, чтобы отображалась иконка сайта на закладке браузера. Чаще всего это не нужно, но для гарантии можно, хуже не будет.

# Add ICO mime type
AddType image/x-icon .ico

Теперь стандартный код WordPress, который он обычно сам генерирует при установке.

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^robots.txt$ - [L]
RewriteRule ^sitemap.xml$ - [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

Осталось совсем немного тюнинга...

Добавим немного секретности — попросим сервер не сообщать его название, версию и окружение, в случае HTTP ошибок. Например, при обращении к существующему, но запрещенному каталогу например:
http://frontcamp.com/wp-content/themes/living-journal/library/

HTTP error 403: Forbidden / Ошибка 403Сервер вернет стандартную заглушку "Forbidden - You don't have permission to access /wp-content/themes/living-journal/library/ on this server" ("Запрещено - Вы не имеете прав для доступа...").

Обычно внизу появляется еще что-то вроде: "Apache v.N.N.N, PHP,...". По сути, информация безвредная, но зная серверное ПО и его версии, взломщик уже может целенаправленно искать уязвимости.

Еще давайте ограничим размер загружаемых файлов до 10 Мб.

# Limit file uploads to 10mb
LimitRequestBody 10240000

Это тоже дополнительная мера предосторожности.

Еще, при поиске решений по оптимальному конфигурированию .htaccess для WordPress я несколько раз встречал отзывы людей, что у них чтото не работало до тех пор, пока они не добавили в самое начало .htaccess такую директиву:

# Turn off inheritance
SecFilterInheritance Off

Она отменяет действия настроек из более вышележащих файлов .htaccess. Это может помочь в том случае, если ваш блог установлен не в корневом каталоге на хостинге, а во вложенном. А в корневом есть свой проект, под который настроен свой собственный .htaccess. В этом случае, его действие распространяется и на блог, что может быть не желательно.

Вот, вроде бы и всё. Если найдете ошибки или что-то новое/интересное про .htaccess для WordPress — пишите в комментарии, будем накапливать опыт вместе.

Поделитесь с друзьями:



Один комментарий к “Как составить правильный .htaccess для WordPress

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>