.htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.
Файл .htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess). Для того чтобы эти файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла (значение директивы AllowOverride должно быть установлено All). Как правило, подавляющее большинство хостеров разрешают использовать свои файлы .htaccess.
Пути к файлам и каталогам должны указываться от корня сервера, например, /var/www/domain.com/htdocs/
1. Защита от Hotlink
Хотлинк (Hotlink) — вставка прямых ссылок изображений или файлов с одного сайта на другие. Этот прием используется довольно часто, ну например, у вас на сервере не хватает места для хранения картинок и вы пользуетесь каким-либо бесплатным сервисом для хранения файлов изображений, т.е. загружаете картинку, получаете URL и вставляете его на свой сайт.
# Запретить другим сайтам использовать прямые ссылки на ваши картинки
RewriteCond %{HTTP_REFERER} !^$
# Дальше список разрешенных доменов
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?site.com.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?site.com:80.*$ [NC]
# IP сайта (домена)
RewriteCond %{HTTP_REFERER} !^http(s)?://111.111.111.111.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://111.111.111.111:80.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex.ru [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google. [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?домен_дружественного сайта.com [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
# Форматы файлов, для которых устанавливается защита
# Выводит ошибку 403
RewriteRule \.(jpe?g|bmp|gif|png|css|mov|swf|dcr|exe|rar|avi|vob|zip|pdf|txt|doc|flv|mp3|mp4)$ — [NC,F,L]
# или показывает спецрисунок вместо указанного
RewriteRule .*\.(jpe?g|bmp|gif|png)$ files/images/nohotlink.jpg [NC,L]
2. Блокировка запросов от нежелательных 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, которые могут быть потенциально опасными или просто перегружать сервер ненужными запросами.
Список User Agent браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте List of User-Agents.
3. Запрещаем доступ всем, кроме указанных IP-адресов
#Запрещаем доступ всем, кроме указанных IP-адресов
ErrorDocument 403 http://site.com
Order deny,allow
Deny from all
Allow from 111.22.33.444
site.com
- меняем на свое доменное имя,
111.22.33.444
- указываем IP-адрес с которого доступ открыт
4. Собственные страницы ошибок
# Собственные станицы ошибок
ErrorDocument 403 /err/403.php
ErrorDocument 404 /err/404.php
err/*.php
- путь от корневой директории сайта к файлу соответствующей ошибки
5. Защита файла на сервере
#Защищаем .htaccess файл
<files .htaccess="">
order allow,deny
deny from all
</files>
Правило позволяет запретить доступ к любому файлу — посетителю будет отдаваться ошибка 403.
6. Назначаем дефолтной страницей произвольную страницу сайта
#Устанавливаем альтернативную страницу по-умолчанию
DirectoryIndex about.html
По-умолчанию, начальной страницей является index.html
. С помощью данного правила это условие можно изменить и начальной страницей назначить любую другую страницу. В примере выше такой страницей стала about.html
. Естественно, чтобы это все работало, такая станица должна фактически присутствовать на сайте.
7. Защита паролем папок и файлов на сервере
#защита паролем файла
<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
. Например, вот этим.
8. Правильный редирект со старого домена на новый
#Перенаправляем со старого домена old.com — на новый
RewriteEngine On
RewriteRule ^(.*)$ http://new.com/$1 [R=301,L]
9. Убираем расширение файла из URL
#Убираем расширение файла из URL
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]
#или
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]
10. Запрет на выполнение скриптов
#Включаем отслеживание сим-ссылок
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]
11. Блокируем доступ к сайту спам-ботам
## Блок реферального спама
RewriteCond %{HTTP_REFERER} semalt.com [NC,OR]
RewriteCond %{HTTP_REFERER} buttons-for-website.com [NC,OR]
RewriteCond %{HTTP_REFERER} seoanalyses.com [NC]
RewriteRule .* - [F]
Правило призвано заблокировать реферального спам-бота, прежде чем он получит возможность зарегистрироваться на сайте в качестве реферера. Данное правило можно и нужно пополнять другими обнаруженными спам-ботами исходя из информации в Google Analytics Развернутый перечень источников спама можно посмотреть здесь.