Opencart

17 правил .htaccess, которые должен знать любой веб-мастер

 

Файл .htaccess на сайте нужен для того, чтобы напрямую отдавать серверу определённые команды или устанавливать какие-либо параметры. Например, через .htaccess на блогах часто включают кэширование страниц, устанавливают редирект, блокируют различные запросы и т. д. Но каждая дополнительная функция увеличивает нагрузку на сервер, поэтому обращаться к этому способу управления следует лишь в том случае, когда нет других вариантов. Обычно всегда можно реализовать желаемую функцию с помощью плагина или редактирования кода.

Давайте разберём 17 основных правил, который должен знать любой веб-мастер, желающий работать с файлом .htaccess.

Установка запрета на загрузку файлов с других ресурсов

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

Если разместить в .htaccess нижеприведённый код, то, открыв страницу с файлом на вашем ресурсе, пользователи лишь увидят сообщение об ошибке. В пределах своего ресурса запрет распространяться не будет, так что можно не беспокоиться о том, что пользователи не увидят даже загруженный вами (администратором) файл.

#Запрещаем загрузку файлов с внешних сайтов

Options +FollowSymlinks

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www.)?site.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ https://site.com/stop.gif[nc]
 

 

Используя любую команду, необходимо заменять адрес сайта (site.com) на свой.

Блокировка нежелательных User Agents

Иногда на сайте могут появиться переходы различных ботов, спамеров, других сервисов и т. д. В маленьком количестве они не принесут большого вреда, но когда таких переходов много, может появиться немаленькая нагрузка на сервер. Если сразу заблокировать нежелательные 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>

Блокировка IP-адресов

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

В нижеприведенной команде нужно прописать только те IP, которым будет открыт доступ. Для всех остальных он будет заблокирован. Вместо domainname, здесь также нужно указать своё доменное имя.

#Запрещаем доступ для всех, кроме указанных IP-адресов


ErrorDocument 403 https://www.domainname.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

301 Редирект

Поисковые системы не приветствуют перенаправление с одной страницы на другую. Если же создать редирект через файл .htaccess, то от поисковых систем санкций не последует.

  • com – это доменное имя.
  • /file.html – это страница (директория).

#Настраиваем SEO-Friendly 301 Redirect


Redirect 301 /1/file.html https://www.site.com/2/file.html

Редактирование страницы ошибки 404

Если появилось желание сделать сайт ещё красочней, то можно отредактировать страницу ошибки 404. В стандартном варианте пользователю просто указывается, что данной страницы не существует. Мы же можем добавить какое-нибудь изображение, изменить текст и т. д.

Для начала нужно создать эту страницу и залить на хостинг. В .htaccess остаётся прописать адрес до файла.

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

Чёрный список IP-адресов

Если на сайте появился злостный спамер или агрессивный комментатор, то можно занести его IP в чёрный список. Больше с этого адреса на ресурс он зайти не сможет. Если сайт работает на CMS, то узнать IP можно в админке. Там часто ведутся логи.

#Создаем черный список IP адресов


allow from all
deny from 145.186.14.122
deny from 124.15.

Блокировка доступа к определённому файлу

Если вы не хотите, чтобы кто-то могут увидеть содержание файлов на хостинге, то доступ к ним можно заблокировать. Без блокировки, любой пользователь при желании сможет узнать, что, например, у вас прописано в .htaccess или robots.txt.

#Защищаем .htaccess файл


<files .htaccess="">
order allow,deny
deny from all
</files>

Установка пароля на доступ к файлам

Также файлы можно не блокировать полностью, а создать доступ по паролю. Чтобы установить пароль нужно создать файл .htpasswd. Там в формате user:password он и должен хранится. Но пароль нужно зашифровать, чтобы никто не получил к нему доступ. В интернете есть несколько сервисов для автоматической шифровки.

#защита паролем файла
<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

Перенос сайта на новый домен

301 редирект сделан для переадресации с одной страницы на другую, но вот если придётся перенести сайт на новый домен, то тут лучше воспользоваться нижеприведённой командой.

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

Кэширование

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

#Усиливаем кеширование
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|gif|png|css|js)$">
ExpiresActive on
ExpiresDefault «access plus 1 year»
</filesmatch>
</ifmodule>

Включение сжатия

Включённое сжатие также позволит ускорить загрузку. Сначала сервер попытается сжать все данные, и только после этого отправит их пользователю. Для улучшения результата можно включить компрессию (строка addOutputFilterByType), но тогда процессор сервера будет сильно нагружен. Так что при обычном тарифе на хостинге эту строчку лучше удалить.

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

Запрет на доступ к папкам

Если нет желания, чтобы кто-то “гулял” по директориям сайта, то достаточно вставить специальную запрещающую команду.

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

Блокировка комментирование записей без Referrer

Referrer определяет откуда именно был произведён переход на ресурс. Часто спам-боты делают прямые переходы на сайт, и соответственно, Referrer у них отсутствует. Для таких пользователей возможность комментирования лучше отключить, чтобы избежать спама.

#Запрещаем комментарии от пользователей без Referrer
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .comment\/reply\/*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^https://%{REMOTE_ADDR}/$ [R=301,L]

Дополнительная защита

Некоторые пользователи могут внедрить определённый скрипт или команду в базу данных, с помощью чего они получат к ней доступ. На первых этапах развития ресурса такой угрозы нет, но лучше защититься от неё заранее.

#Включаем отслеживание сим-ссылок
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]

Перенаправление пользователя с помощью директивы RedirectMatch

Этот директив позволит сообщать браузеру о том, что появилась необходимость перенаправления на другую страницу.

RedirectMatch [status] regexp URL

Здесь имееются несколько статусов:

  1. 301 – постоянный редирект (permanent).
  2. 302 – временный. (temp).
  3. 303 – на наиболее популярную или полезную страницу (seeother).
  4. 410 – редиректа нет, так как она удалён (gone).

Защита от прямых ссылок

Некоторые ресурсы пытаются экономить место на своём хостинге, и используют изображения, которые были загружены на другие ресурсы. Чтобы пользователи не использовали прямые ссылки с нашего сайта в качестве хостинга для изображений, стоит поставить защиту. После этого, открыв прямую ссылку, все другие посетители получат ошибку 403.

# Запретить другим сайтам использовать прямые ссылки на ваши картинки
RewriteCond %{HTTP_REFERER} !^$
# Дальше список разрешенных доменов
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?sitename.ru.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?sitename.ru: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.)?домен_дружественного сайта.ru [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]

Защита от хотлинка с ImageCache

Но если использовать ImageCache, то вышеприведённый вариант работать не будет. Для того, чтобы это исправить, достаточно добавить ещё один код.

SetEnvIfNoCase Referer «^$» local_ref=1
# Allowed domains
# Далее разрешенные домены
SetEnvIfNoCase Referer «^https://(www\.)?domain\.ru» local_ref=1
SetEnvIfNoCase Referer «^https://(www\.)?domain\.com» local_ref=1
# File extensions that you want to protect
# Расширения файлов, которые нужно защитить
<FilesMatch "\.(bmp|jpe?g|gif|png)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>

Запрещаем доступ в админ-панель с других ip адресов

Создайте файл .htaccess в папке admin и запишите в него этот код где xxx.xxx.xxx.xxx это ваш ip адрес. Если у вас динамический ip указываем только ххх.ххх.

<Files "index.php">
order deny,allow
   Deny from all
Allow from xxx.xxx.xxx.xxx
</files>

Заключение

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

 

Оставить комментарий