24 секрета настройки .htaccess файла

.htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, и некоторых других, подобных ему серверов.

При правильном использовании, конфигурационный файл web-сервера Apache — .htaccess (hypertext access) представляет собой очень мощное средство в инструментарии разработчика. По обыкновению, основной файл располагается в корневой директории вашего web-сервера (также могут присутствовать отдельные файлы в каждой папке — для управления доступом) и может быть откорректирован с помощью любого текстового редактора. В этой статье вам представлено 24 правила для .htaccess с пояснением по их использованию.

Важно! Как правило, файл .htaccess устанавливается на хостинге (веб-сервере) вместе с установкой сайта, но если его там нет, тогда вы можете создать этот файл с помощью блокнота. Для этого откройте блокнот, добавьте туда необходимые для вас директивы, примеры которых будут приведены ниже, и сохраните как текстовый документ, с названием – .htaccess. Потом просто уберите расширение .txt, и файл готов.

Важно! Перед внесением изменений в файл .htaccess, создайте его резервную копию, чтобы в случае сбоя работы вашего сайта, можно было вернуть все изменения.

Важно! Работоспособность указанных ниже правил (директив) зависит от настроек вашего web-сервера, заданных хостером, поэтому некоторые директивы могут быть запрещены и не работать.

Важно! Злоупотребление использованием .htaccess может привести к снижению производительности вашего сайта. Использовать .htaccess для реализации той или иной задачи стоит только в том случае, если нет других вариантов.

Правила .htaccess

1. Запрещаем загрузку файлов с внешних сайтов
Приведенный ниже код помещен в конце вашего файла .htaccess, предотвратит загрузку изображений с вашего ресурса на сторонние сайты, тем самым сэкономит расходуемый Вами траффик и предотвратить ненужную нагрузку на ваш хостинг.

Options +FollowSymlinks
#Запрещаем загрузку файлов с внешних сайтов
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?your_domain.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ http://your_domain.com/img/goaway.gif[nc]

Не забудьте изменить your_domain.com на ваше доменное имя и создать изображение goaway.gif, которое будет показано вместо запрошенной картинки.

2. Блокируем все запросы от нежелательных User Agents
Это правило позволяет блокировать нежелательные User Agents, которые могут быть потенциально опасными или просто ненужными запросами перегружать сервер:

#Блокируем нежелательных ботов и роботов
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 браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте http://www.user-agents.org/

3. Запрещаем доступ для всех, кроме указанных IP-адресов
Если по какой-либо причине, вы хотите запретить всем или разрешить только отдельным IP-адресам доступ к вашему сайту — добавьте этот код в ваш .htaccess-файл:

#Запрещаем доступ для всех, кроме указанных IP-адресов
ErrorDocument 403 http://your_domain.com
Order deny,allow
Deny from all
Allow from IP1
Allow from IP2 и т. д.

Не забудьте изменить your_domain.com и IP1,2 и т.д. на ваше доменное имя и необходимые IP-адреса соответственно.

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

#Создаем черный список IP адресов
allow from all
deny from IP1
deny from IP2 и т. д.

В случае, если причиной блокировки IP-адреса является назойливые спам-комментарии, узнать IP-адреса комментаторов можно или в логах Apache, или с помощью сервисов статистики. Для WordPress, IP-адреса комментаторов можно увидеть в административной панели. Таким же образом возможно заблокировать доступ на сеть IP-адресов, указав «deny from IP/маска сети».

#Создаем черный список для подсети
allow from all
deny from 192.168.0.0/24

5. Настраиваем SEO-Friendly 301 Redirect
Если вы перенесли доменное имя или хотите перенаправлять пользователя на определенную страницу (страницы), без санкций со стороны поисковых машин, используйте этот код:

#Настраиваем SEO-Friendly 301 Redirect
Redirect 301 /d/file.html http://your_domain.com/r/file.html

Не забудьте изменить your_domain.com на ваше доменное имя, а /d/file.html и /r/file.html на соответствующие директории и страницы.

6. Создаем собственные страницы ошибок
Если вы желаете повысить уникальность вашего ресурса, и для этого хотите заменить стандартный вид страниц ошибок, это возможно с помощью следующего кода:

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

Не забудьте создать в корневой директории вашего сервера папку «error» и разместить в ней соответствующие файлы.

7. Устанавливаем e-mail адрес по умолчанию для администратора сервера
Используйте данный код, для того, чтобы установить e-mail адрес по-умолчанию для администратора сервера:

#Устанавливаем e-mail адрес по умолчанию для администратора сервера
ServerSignature EMail
SetEnv SERVER_ADMIN default@your_domain.com

Не забудьте заменить default@your_domain.com— необходимым вам e-mail адресом.

8. Защищаем определенный файл
Приведенный ниже код позволяет вам запретить доступ к любому файлу — при запросе будет выдаваться ошибка 403. На примере закрыт доступ к самому файлу .htaccess – таким образом можно повысить уровень безопасности сайта:

#Защищаем .htaccess файл
<files .htaccess>
order allow,deny
deny from all
</files>

9. Сжимаем компоненты сайта путем включения Gzip
При использовании Gzip, сервер будет сжимать файлы перед отправкой их пользователю, по средством этого ваш сайт будет грузиться быстрее:

#Сжимаем компоненты сайта путем включения Gzip
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html

Обратите внимание, что включение компрессии приведет к большей нагрузке на процессор сервера.

10. Сжимаем элементы с помощью mod_deflate
В качестве альтернативы компрессии файлов с помощью Gzip, вы можете использовать mod_deflate (предположительно, работает быстрее). Разместите следующий код в начале вашего файла .htaccess (так же вы можете добавить .jpg|.gif|.png|.tiff|.ico):

#Сжимаем элементы с помощью mod_deflate
<ifmodule mod_deflate.c=””>
<filesmatch .(js|css)$=””>
SetOutputFilter DEFLATE
</filesmatch>
</ifmodule>

11. Добавляем срок жизни в заголовки
Данный код позволяет добавить сроки жизни в заголовки:

#Добавляем срок жизни в заголовки
<filesmatch .(ico|pdf|flv|jpg|jpeg|png|gif|swf)$=””>
Header set Expires “Wed, 31 December 2014 20:00:00 GMT+2”
</filesmatch>

12. Устанавливаем страницы по умолчанию
Обычно страницей по умолчанию является index.html, однако с помощью этого кода вы можете назначить любую другую страницу по умолчанию:

#Устанавливаем альтернативную страницу по умолчанию
DirectoryIndex yourpage.html

Не забудьте заменить yourpage.html — необходимой вам страницей

13. Защищаем паролем папки и файлы
Вы можете включить проверку пароля для доступа в любую папку или файл на вашем сервере, используя этот код:

#защита паролем файла
<files secure.php=””>
AuthType Basic
AuthName “Prompt”
AuthUserFile /pub/home/.htpasswd
Require valid-user
</files>
#защита паролем папки
resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /pub/home/.htpasswd
AuthGroupFile /dev/null
Require valid-user

Для того, чтобы организовать доступ к файлу по паролю, необходимо создать файл .htpasswd и внести в него пару логин-пароль в формате user:password. Однако в этом случае пароли будут хранится в открытом виде, что не слишком хорошо с точки зрения безопасности. Поэтому оптимальным решением будет пароль зашифровать. Для этого воспользуйтесь сервисами генерации записей в файлы .htpasswd.
Например, http://www.htaccesstools.com/htpasswd-generator/
В примере файл с паролями доступа лежит в корневой директории сайта и называется .htpasswd. Директория указывается от корня сервера и если путь будет некорректным — Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю — в том числе и тому, который ввел правильную пару логин: пароль.

14. Перенаправляем со старого домена — на новый
Используя .htaccess, вы можете настроить перенаправление со старого доменного имени на новое, добавив следующий код:

#Перенаправляем со старого домена – на новый
RewriteEngine On
RewriteRule ^(.*)$ http://www.yournewdomain.com/$1 [R=301,L]

Перенаправление используется в том случае, если вы переносите свой существующий сайт на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строке http://www.yourolddomain.com — будет перенаправлен на http://www.yournewdomain.com.

15. Усиливаем кеширование
Использование этого правила не означает прямое ускорение загрузки вашего сайта. Оно предназначено для более быстрой загрузки сайта — для уже заходившего на него посетителя, путем отправки статуса 304 для тех элементов, которые не обновлялись. Таким образом, при повторной загрузке страницы браузер посетителя не будет заново скачивать изображения, скрипты или CSS, а выведет те файлы, которые уже хранятся в его кеше. Вы можете изменить срок жизни кеша, путем корректирования его значения в годах (year), месяцах (month) или, например — секундах (seconds):

#Усиливаем кеширование
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch “.(jpg|gif|png|css|js)$”>
ExpiresActive on
ExpiresDefault “access plus 1 month”
</filesmatch>
</ifmodule>
В примере указан 1 месяц.

16. Удаляем «category» из URL
Для изменения ссылки http://yourdomain.com/category/news на http://yourdomain.com/news, просто добавьте следующий код в конце вашего .htaccess файла:

#Удаляем category из URL
RewriteRule ^category/(.+)$ http://www.yourdomain.com/$1 [R=301,L]

Не забудьте изменить http://www.yourdomain.com на ваше доменное имя.

17. Запрещаем просмотр содержимого папки
Для того, чтобы ограничить доступ к директориям, которые могут содержать разнообразную информацию и для обеспечения безопасности сервера, добавьте этот код в файл .htaccess:

#Запрещаем просмотр содержимого папки
Options All -Indexes

Существует альтернативное решение, имеющее такой же результат, для этого необходимо разместить в каждой папке вашего сайта пустой файл index.html. Этот метод будет работать только в том случае, если вы не изменяли страницу по умолчанию (см. правило 12). Если изменения были проведены, необходимо размещать файлы с тем новым именем, которое было задано вами в качестве страницы по умолчанию.

18. Перенаправляем RSS-ленту WordPress на FeedBurner
Этот код позволяет перенаправить RSS-ленту СMS WordPress на сервис Google Feedburner:

#Перенаправляем RSS-ленту WordPress на FeedBurner
<ifmodule mod_rewrite.c=””>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^rss.xml$ http://feeds.feedburner.com/yourfeed [R=302,NC,L]
</ifmodule>

Изначально необходимо зарегистрировать ленту своего блога в сервисе Feedburner от Google. Далее не забудьте заменить yourfeed на имя вашей ленты уже в Feedburner.

19. Запрещаем комментарии от пользователей без Referrer
Чаще всего спам-боты обращаются напрямую к файлу wp-comments-post.php, не заходя на страницы записей вашего блога. Приведенный ниже код позволяет заблокировать комментарии, отправленные пользователями, которые пришли «из ниоткуда», позволяя комментировать тем читателям, которые перешли на страницу вашего блога с каких-либо других страниц (например, результатов поиска Google, Yandex и т.д.):

#Запрещаем комментарии от пользователей без Referrer
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*

RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
Не забудьте заменить yourblog.com на доменное имя вашего блога.

20. Убираем расширение файла из URL
Данный код позволяет удалить расширение файла .php (вы можете изменить его на любое другое, например на т 2.html) из URL-адресов страниц:

#Убираем расширение файла из URL
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]

21. Защищаем сайт
Данный код позволяет защитить ваш сайт от scripts enjection и нежелательных модификаций «_REQUEST» и/или «GLOBALS»:

#Включаем отслеживание сим-ссылок
Options +FollowSymLinks
#Запускаем url_rewriting
RewriteEngine On
#Блокируем все ссылки, содержащие <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
#Блокируем все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
#Блокируем все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
#Перенаправляем все подобные на страницу с ошибкой 403 – запрещено
RewriteRule ^(.*)$ index.php [F,L]

Источник: WPRecipes.

22. Перенаправляем посетителя с помощью директивы RedirectMatch и регулярных выражений
Еще одна полезная директива, рекомендуемая к использованию Хайпер – RedirectMatch. Цитата из комментариев: «Директива позволяет в качестве запрашиваемого адреса использовать регулярное выражение (пересылка не «с документа», а «со всех документов, типа …»). Редирект внешний — браузеру сообщается о необходимости загрузить другую страницу. Синтаксис:

RedirectMatch [status] regexp URL

Значения статусов (код возврата веб-сервера) стандартные: permanent (301 — постоянный редирект), temp (302 — временный редирект, приходите ещё), seeother (303 — летим туда, там много вкусного), gone (410 — удалён навсегда). Пример. То же перенаправление со старого домена на новый без подключения RewriteEngine:

RedirectMatch 301 ^(.*)$ www.yourdomain.com/$1
Вы можете использовать не только статусы, но и другие условия:
RedirectMatch (.*)\.gif$ http://www.myserver.com$1.png
RedirectMatch (.*\.jpg)$ http://www.myanother.com$1

23. Устанавливаем редирект для URL с GET параметрами
В том случае, если нужно сделать редирект с URL с параметрами, например: «http://www.eviladmin.com.ua/wp-trackback.php?p=264», описанная в п. 5. «Настраиваем SEO-Friendly 301 Redirect» конструкция — работать не будет, поскольку GET параметр мешает правильной интерпретации команды.
Для корректного перенаправления URL с GET запросом, нужно прописать следующие директивы (на примере URL: http://www.eviladmin.com.ua/wp-trackback.php?p=264):

1. RewriteEngine On
2. RewriteCond %{QUERY_STRING} ^p=264$
3. RewriteRule ^wp-trackback\.php$ http://www.eviladmin.com.ua/article-2242.html? [L,R=301]

Обратите внимание, «?» в конце URL не ошибка — а обязательно присутствующий знак!

24. Включение PHP в .html файлах
Еще одна директива, позволяет убрать сопоставление по-умолчанию .html и .htm файлов с файлами с гипертекстовой разметкой, и добавить их обработку php-интепретатором:

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

 

 
  • Саша Базан

    Спасибо, информативно