Если вы создали свой сайт и напомнили его начальным контентом – это здорово! Теперь вы ждете своих первых посетителей. Однако теперь важно сделать так, чтобы ваш сайт было легко найти в Интернете – это одна из самых важных задач после завершения установки сайта. И это абсолютно естественно, поскольку какой толк от сайта, если люди не могут найти его. Как результат, выставить основные настройки Joomla (настройки ядра Joomla, а не расширения) так, чтобы он был оптимизирован для поисковых систем – это очень важно.
Скажем сразу, настройка и оптимизация для SEO – само по себе не простое дело. Вам придется пройти через множество шагов. В этой статье я хотел бы поделиться с вами некоторыми рекомендациями о том, как настроить SEO оптимизацию в Joomla 3.x самым простым и элементарным способом.
1. Войдите в вашу админ-панель Joomla.
2. После входа в вашу админку Joomla, мы можем начать с самых оптимизации, посетив раздел Общие настройки.
3. Включите ЧПУ и Перенаправление URL
В разделе Общих настроек на вкладке “Сайт”, нажмите “Да”, чтобы включить пункты “Включить SEF (ЧПУ)” и “Перенаправление URL”.
-
SEF или ЧПУ (человекопонятные URL) – это настройка, которая удаляет все динамически генерируемые адреса страниц, а затем заменяет их псевдонимами пункта меню или алиасами и делает URL-адреса понятными.
-
Перенаправление URL-адресов – это параметр, который удаляет /index.php/ из URL. Однако для этого должен быть включен, вы должны иметь файл .htaccess и включенный в нем параметр “mod_rewrite”. Но об этом чуть ниже.
4. Переименуйте htaccess.txt в .htaccess
Переименование htaccess.txt файла на вашем сервере в .htaccess – в противном случае вы получите различного рода ошибки, например ошибку 404.
Для переименования файла зайдите в FTP-клиент или панель управления хостингом (там вы можете найти файловый менеджер или вход в cPanel или ISPManager). Откройте корневой каталог вашего сайта, где находятся все основные файлы и папки вашего сайта, подобные тем, которые вы можете увидеть на скриншоте ниже. Найдите файл htaccess.txt. Откройте его с помощью программы Notepad ++, либо любой другой программы, которая может открыть код файлов. Если же вы не хотите устанавливать никаких программ, то вы можете просто скачать данный файл (htaccess.txt) и сменить его расширение, с помощью стандартных средств Windows.
А теперь рассмотрим, как сделать это с помощью Notepad++.
Найдите файл и откройте его.
Сохраните файл как .htaccess и выберите тип файла “All types (*,*)”
5. Удалить “images/” из файла robots
До версии Joomla 3.3, Joomla автоматически генерировала файл robots.txt при установке, который включал правило запрета индексации каталога изображений поисковыми системами, т. е. поисковые системы были не в состоянии анализировать или индексировать папку images. Поэтому очень важно удалить следующую строку из файла robots.txt : /images/. К счастью, после обновления Joomla 3.3, директория: /images/ была удалена. Можно увидеть, что теперь такого строчки в файле robots.txt нет. Тем не менее, рекомендуем вам проверить эту строку.
6. Редиректы сайта с www. или без www.
В Joomla нет автоматического перенаправления на версию вашего сайта с www. или без www.
Для целей поисковой оптимизации, вы должны решить, какой должен быть адрес у вашего сайта. Или это должен быть www.site.ru или просто site.ru. Между данными двумя версиями нет абсолютно никакой разницы. Но если вы хотите, чтобы ваш сайт получал лучшие позиции в поиске – пропишите в настройках .htaccess, какую версию сайта вы предпочитаете.
Поскольку “www” – это скорее пережиток прошлого и только удлиняет адрес сайта, то я хотел бы предложить вам настройки для создания одного адреса сайте без “www”. При внесении данной настройки, если кто-либо попытается зайти на ваш сайт по адресу www.site.ru, то он будет перенаправлен на адрес site.ru. Благодаря этому поисковые системы будут знать, что единственная версия вашего сайта одна, и в их поисковой выдаче будет появляться лишь данная версия, что хорошо скажется на вашем продвижении.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R,L]
Если же вы хотите, произвести редирект с адреса без www. на www. пожалуйста, добавьте следующий код в ваш .htaccess файл:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
7. Обновите мета-данные всех страниц
Мета-данные – это информация, которая является своего рода подсказкой для поисковых систем и содержит информацию: о том, что представлено на сайте; о тех запросах, по которым вы хотели бы, чтобы находили ваш сайт; о ключевых словах страницы.
При этом существует 2 типа мета-данных.
-
Meta Description (Мета-описание) – информация, которую покажет поисковик при выводе вашей странице в поиске.
-
Meta Keywords (Ключевые слова) – подсказка поисковику о возможных запросах.
Это один из лучших инструментов для продвижения сайта на Joomla. Поэтому рекомендуем вам зайти в каждый пункт меню и каждый материал, и отредактировать данные пункты вручную. Благодаря этому вы получите значительное улучшение поисковых позиций.
Итак, вы справились! Теперь ваш сайт Joomla стал дружественным для поисковых систем!
Конечно, существует много способов, чтобы максимизировать SEO для вашего сайта Joomla! Я только поделился простым способом, который может помочь Вам с основными этапами. Не стесняйтесь писать нам, если у вас есть какие-либо советы по SEO Joomla!
Есть большая доля вероятности, что вы пользуетесь сервером Apache. Это один из самых популярных видов серверов, для какого есть особые файлы конфигурации. В частности, такой файл — это htaccess.
Данный файл предназначен для определения различных дополнительных параметров и конфигураций apache.
В предложенной статье будет рассмотрен htaccess для Joomla: его настройка, возможности и требования.
Содержание
- Что можно сделать при помощи файла htaccess
- Как найти, создать и настроить htaccess
- Что можно будет указать в файле htaccess
- Как правильно настроить htaccess на Joomla
Что можно сделать при помощи файла htaccess
Основная опция, которой пользуются веб-мастера при помощи htaccess — это установка редиректа на определенные страницы и сайт в целом. Данная настройка позволяет перенаправлять пользователей и поисковые машины на заданный адрес, что поможет вам решить проблему дублирования URL, из-за какой ухудшается индексация ресурса.
С другой стороны, htaccess позволит вам изменить настройки доступа к различным частям сайта. Именно благодаря htaccess вы сможете заблокировать вход для указанного ip-адреса, введя таким образом бан на сайте для зловредных юзеров. И это только некоторые возможности файла htaccess, которые вы можете использовать.
Как найти, создать и настроить htaccess
Находиться файл htaccess должен в корневом каталоге на сайте, точно там же, где и robots.txt. Но вы имеете право поместить htaccess где угодно на хостинге. Разница в том, что если htaccess размещен в папке images, то и оказывать влияние он будет именно на каталог с картинками, а не на весь сайт. Так что вы можете разместить несколько файлов htaccess по сайту, чтобы создать максимально гибкие условия доступа.
Итак, пройдите через FTP-менеджер в файловую систему сайта в его корень. Если там нет файла htaccess, то вам придется его создать. Сделать это несложно и есть разные способы создания файла конфигурации для сервера:
- Первый вариант — это создание htaccess у вас на компьютере. Вам нужно будет открыть блокнот и прописать значения для файла. Затем вам нужно будет при помощи FTP-менеджера перенести файл на хостинг в корень сайта, а затем уже при помощи возможностей панели управления переименовать его с txt-формата в .htaccess с точкой в начале.
- Второй вариант еще проще — создайте эту конфигурации не выходя из админки хостинга при помощи кнопки «Создать файл». У вас наверняка имеется такая возможность.
Что можно будет указать в файле htaccess
Настройка конфигураций внутри htaccess полностью зависит от ваших потребностей. Если нужно запретить доступ к определенным директивам, то пропишите это, указав название папки через решетку #. Запрет для всех прописывается при помощи тега deny from all. Если вы хотите открыть доступ для всех, то напишите противоположный тег — allow from all. Также вы сможете ограничить права для всех пользователей для определенного файла при помощи тегов <files></files>. Внутри первого тега после слова files укажите название файла и его формат.
Возможности htaccess в плане ограничения и открытия доступа к определенным данным сайта ограничены только вашей фантазией. К примеру, при помощи того же тега <files> вы сможете запретить просмотр всех файлов определенного формата. А чтобы заблокировать конкретный ip-адрес, укажите строку Deny from и напишите ip-адрес. Если нужно указать несколько адресов, то пишите их через пробел в ряд.
Кроме того, файл htaccess в некотором роде может заменить robots.txt. Для этого вам нужно будет прописать юзер-агентов, для которых вход на ресурс воспрещен. Но поскольку сделать это не совсем удобно и просто, лучше воспользоваться классическим robots.txt и не заморачиваться.
Гораздо лучше использовать полезные функции htaccess. К таким можно отнести gzip-сжатие для ускорения работы сайта. После активации такой опции браузеры посетителей будут автоматически сжимать загружаемую информацию и реальный вес сайта уменьшится, как и время загрузки страницы. Но при этом повысится давление на сервер, так что у каждой «медали» две стороны. Что включать, а что нет — решать вам. Главное — это изменить стандартный файл, чтобы он способствовал улучшенной работе сайта на движке Joomla.
Как правильно настроить htaccess на Joomla
Во-первых, включите mod_rewrite. Эта функция используется очень часто, потому лучше сразу ее активировать. Она вам понадобится, когда вы включите в админке человекопонятные ссылки. Если mod_rewrite не активировать, они не заработают, еще и ошибка выскочит при загрузке страницы. Тег, который активирует этот модуль выглядит следующим образом: # RewriteEngine On.
Чтобы обеспечить безопасность своего ресурса, вам нужно отключить в PhP register_globals. Не стоит вдумываться, зачем это делать — просто отключите функцию, и получите повышение безопасности — это точно! Но самое главное, что вам нужно сделать в файле .htaccess — это активировать перенаправление URL во избежание появления дублей страниц. Это нужно, чтобы сайт одинаково работал и с WWW и без. Иначе один из вариантов не будет включаться и вы потеряете какую-то часть аудитории.
В данной статье приведены стандартные файлы .htaccess для наиболее популярных CMS. Файл .htaccess находится в корневой папке сайта.
Файл .htaccess для Joomla
##
# @version $Id: htaccess.txt 14401 2010-01-26 14:10:00Z louis $
# @package Joomla
# @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##
#####################################################
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's. If they work,
# it has been set by your server administrator and you do not need it set here.
#
#####################################################
## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks
#
# mod_rewrite in use
RewriteEngine On
########## Begin - Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
## Deny access to extension xml files (uncomment out to activate)
#<Files ~ ".xml$">
#Order allow,deny
#Deny from all
#Satisfy all
#</Files>
## End of deny access to extension xml files
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root)
# RewriteBase /
########## Begin - Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|.php|.html|.htm|.feed|.pdf|.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End - Joomla! core SEF Section
Файл .htaccess для WordPress
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
В REG.RU вы можете заказать WordPress hosting.
Файл .htaccess для HostCMS
Options +FollowSymlinks
AddDefaultCharset Off
<IfModule mod_php4.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
</IfModule>
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php index.htm index.html
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
</IfModule>
Файл .htaccess для Bitrix
Options -Indexes
ErrorDocument 404 /404.php
<IfModule mod_php5.c>
php_flag allow_call_time_pass_reference 1
php_flag session.use_trans_sid off
#php_value display_errors 1
#php_value mbstring.func_overload 2
#php_value mbstring.internal_encoding UTF-8
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpeg "access plus 3 day"
ExpiresByType image/gif "access plus 3 day"
</IfModule>
Файл .htaccess для ModX
# MODx supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODx.
# E.g., "/modx" if your installation is in a "modx" subdirectory.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
RewriteEngine On
RewriteBase /
# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change.com [NC]
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# DO NOT USE BOTH
#
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^www.example-domain-please-change.com [NC]
#RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
#
# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com.com/$1 [R=301,L]
#
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
#
# Make sure .htc files are served with the proper MIME type, which is critical # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
#AddType text/x-component .htc
#
# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP's register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for "register_globals". The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.
#
#php_flag register_globals Off
#
# For servers that support output compression, you should pick up a bit of
# speed by un-commenting the following lines.
#
#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5
#
# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they're in place, you may have
# to do a force-refresh in order to see changes in your designs.
#
#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary
Файл .htaccess для Drupal
#
# Apache/PHP/Drupal settings:
#
# Protect files and directories from prying eyes.
<FilesMatch ".(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(.php)?|xtmpl)$|^(..*|Entries.*|Repository|Root|Tag|Template)$">
Order allow,deny
</FilesMatch>
# Don't show directory listings for URLs which map to a directory.
Options -Indexes
# Follow symbolic links in this directory.
Options +FollowSymLinks
# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php
# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
# There is no end quote below, for compatibility with Apache 1.3.
ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>
# Set the default handler.
DirectoryIndex index.php index.html index.htm
# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_initialize_variables() in
# includes/bootstrap.inc for settings that can be changed at runtime.
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
</IfModule>
# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On
# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600
<FilesMatch .php$>
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
</FilesMatch>
</IfModule>
# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# <DirectoryMatch> is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule "(^|/)." - [F]
# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
# To redirect all users to access the site WITHOUT the 'www.' prefix,
# (http://www.example.com/... will be redirected to http://example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
# RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /
# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).css $1.css.gz [QSA]
# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).js $1.js.gz [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule .css.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule .js.gz$ - [T=text/javascript,E=no-gzip:1]
<FilesMatch "(.js.gz|.css.gz)$">
# Serve correct encoding type.
Header append Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
</IfModule>
Файл .htaccess для NetCat
AddDefaultCharset windows-1251
ErrorDocument 404 /netcat/require/e404.php
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ /netcat/require/e404.php?REQUEST_URI=$1 [L,QSA]
</ifModule>
Файл .htaccess для DLE
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
# Редиректы
RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]
# Сам пост
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
RewriteRule ^([^.]+)/([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$1&newsid=$2&seourl=$3 [L]
RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1&seourl=$2 [L]
# За день
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
# За весь месяц
RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
# Вывод за весь год
RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
# вывод отдельному тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]
# вывод для отдельного юзера
RewriteRule ^user/([^/]*)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]
# вывод всех последних новостей
RewriteRule ^lastnews/(/?)+$ index.php?do=lastnews [L]
RewriteRule ^lastnews/page/([0-9]+)(/?)+$ index.php?do=lastnews&cstart=$1 [L]
# вывод в виде каталога
RewriteRule ^catalog/([^/]*)/rss.xml$ engine/rss.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
# вывод непрочитанных статей
RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
# вывод избранных статей
RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]
RewriteRule ^rules.html$ index.php?do=rules [L]
RewriteRule ^statistics.html$ index.php?do=stats [L]
RewriteRule ^addnews.html$ index.php?do=addnews [L]
RewriteRule ^rss.xml$ engine/rss.php [L]
RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/page/([0-9]+)/$ index.php?do=cat&category=$1&cstart=$2 [L]
RewriteRule ^([^.]+)/$ index.php?do=cat&category=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]
RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
RewriteRule ^print:([^/]+).html$ engine/print.php?do=static&page=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]
Файл .htaccess для Opencart
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
Файл .htaccess для Webasyst
<FilesMatch ".md5$">
Deny from all
</FilesMatch>
DirectoryIndex index.php
Options -Indexes
# Comment the following line, if option Multiviews not allowed here
Options -MultiViews
AddDefaultCharset utf-8
<ifModule mod_rewrite.c>
RewriteEngine On
# Uncomment the following line, if you are having trouble
RewriteBase /
RewriteCond %{REQUEST_URI} !.(js|css|jpg|jpeg|gif|png|svg|ttf|eot|otf|woff|woff2)$ [or]
RewriteCond %{REQUEST_URI} apple-touch-icon.png$ [or]
RewriteCond %{REQUEST_METHOD} ^(POST|PUT|COPY|MOVE|DELETE|PROPFIND|OPTIONS|MKCOL)$ [or]
RewriteCond %{HTTP:Translate} ^.+$ [or]
RewriteCond %{HTTP_USER_AGENT} ^(DavClnt|litmus|gvfs|davfs|wdfs|WebDAV|cadaver|Cyberduck)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
</ifModule>
<ifModule mod_headers.c>
<FilesMatch ".(jpg|jpeg|png|gif|js|css|svg|ttf|eot|otf|woff|woff2)$">
Header set Cache-Control "max-age=3153600, public"
</FilesMatch>
</ifModule>
Файл .htaccess для LiveStreet
AddDefaultCharset UTF-8
Options -Indexes
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php
# Alternative rule
#RewriteRule ^(.*)$ /index.php
<Files "plugins.dat">
order allow,deny
deny from all
</Files>
Файл .htaccess для PrestaShop
Файл .hraccess генерируется автоматически самой CMS:
# ~~start~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again
# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution
# http://www.prestashop.com - http://www.prestashop.com/forums
Файл .htaccess для Moodle
DirectoryIndex index.php index.html index.htm
php_value memory_limit 40M (adjust to your version of Moodle)
php_flag magic_quotes_gpc 1
php_flag magic_quotes_runtime 0
php_flag file_uploads 1
php_flag session.auto_start 0
php_flag session.bug_compat_warn 0
Если у вас установлен Apache версии 2, добавьте следующие строки:
<IfDefine APACHE2>
AcceptPathInfo on
</IfDefine>
Если у вас иная версия Apache, вставьте строку:
Если конфигурационный файл отсутствует, ознакомьтесь со статьей: Проблемы с .htaccess. В ней дана инструкция, как создать файл htaccess для HTML сайта.
.htaccess – файл где можно задать дополнительные настройки (конфигурации), для веб-сервера Apache (и ему подобных серверов). Позволяет указать большое количество настроек и расширений, для правильной работы веб-сервера в отдельно взятых каталогаг (папок), а в нашем случае отдельных сайтов построенных наcms Joomla.
Основной функционал файла htaccess
С помощью данного файла мы можем настроить редирект (грамотную переадресацию поисковых ботов и посетителей), указать кэш (css, js, изображения и др.), блокировка MySql и файловых инъекций, запрет на доступ к отдельным папкам и каталогам, установка блокировки пользователей по ip, самостоятельная обработка ошибок web-сервера и другие возможности.
Перед самой настройкой файла .htaccess, нам необходимо проверить настройки SEO в админ-панели Joomla. Итак заходим в “админ-панель” – “сайт” – “общие настройки”.
-
“Включить SEF (ЧПУ)” – ставим Да. Делает ссылки человеко-понятными, из плюсов можно отметить – улучшение для поисковой оптимизации, минусы – создает дубли страниц.
-
“Перенаправление URL” – ставим Да. Внимание – прежде чем включить данную опцию, всем пользователям сервера Apache (используется на большинстве виртуальных хостингах) – следует переименовать файл htaccess.txt в файл .htaccess (впереди обязательно точка, не имеет расширения).
-
“Добавлять суффикс к URL” – устанавливаем по желанию (я поставил нет). Если поставить Да – то к каждому url-адресу будет добавляться суффикс, в зависимости от типа документа. Например html, php и другие.
-
“Алиасы в Unicode” – ставим Нет.
-
“Включить название сайта в заголовок страницы” – по желанию (После, До, Нет).
Теперь давайте проверим включен ли системный плагин SEF. Заходим в “Расширения” – “Менеджер плагинов” и ищем плагин “Система-SEF”. Если он выключен, то его необходимо активировать.
Настройка файла .htaccess для Joomla
Сразу хочу отметить, что предлагаемый мной .htaccess не является панацеей, для всех web-ресурсов на cms Joomla, но на начальном этапе вполне работоспособный и достаточно качественный.
Итак первой секцией нам необходимо задать основные опции:
Options +FollowSymLinks -Indexes
-
Директива Options – определяет какие свойства сервера доступны. Опции со знаком “+” будут добавлены к опциям включенным на данный момент, со знаком “-” – будут удалены.
-
+FollowSymLinks – данная опция позволяет нам использовать символические ссылки на каталоги или файлы, которые не находятся в пределах корня вашего сайта.
-
-Indexes – запрет на листинг каталогов, если в них нет индексного файла (например index.html – заглушка).
AddDefaultCharset utf-8
-
Кодировка по умолчанию.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^index.php$ http%2://vashsayt.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>
-
<IfModule mod_rewrite.c> – данное условие предупреждает 500 ошибку сервера, которая может возникнуть, если у вашего хостера не будет установлен модуль mod_rewrite, который в свою очередь входит в сборку сервера Apache по умолчанию.
-
RewriteEngine On – Данная секция отвечает за включения mod_rewrite, который в свою очередь используется, для SEF, а также для перенаправления пользователей по нужным адресам.
-
RewriteBase / – Корневая директория, куда устанавливается Joomla.
-
Следующие 4 строки – отвечают за перенаправление со страниц с /index.php на станицы без index.php. Например пользователь зайдет на http://vashsayt.com/index.php – в этом случае его перебросит (301 редирект) на http://vashsayt.com. Избавление от дублей страниц.
-
Последующие 2 строки – отвечают за перенаправление пользователей с www.vashsayt.comна vashsayt.com. Также убирает дубли страниц.
-
</IfModule> – конец условия.
DirectoryIndex index.php
-
Если у вас в папке находится файлы index.php и index.html, то тогда данная секция укажет серверу – какой файл является более главным (в нашем случае index.php).
Настройка php на хостинге:
<ifModule mod_php.c>
php_value register_globals 0
php_value safe_mode 0
php_value allow_url_fopen 0
php_value display_errors 0
php_value file_uploads 1
php_value magic_quotes_gpc 1
php_value magic_quotes_runtime 0
php_value upload_max_filesize 20M
php_value post_max_size 10M
php_value max_execution_time 100
php_flag register_globals Off
php_flag display_errors Off
php_flag file_uploads On
php_flag allow_url_fopen off
php_flag magic_quotes_gpc On
php_flag magic_quotes_runtime Off
</ifModule>
-
<ifModule mod_php.c> – условие которое предупреждает от 500 ошибки, если на сервере не будет установлен модуль mod_php.
-
php_value register_globals 0 – используется для повышения безопасности. Отключает режим register_globals в PHP.
-
php_value safe_mode 0 – отключение потенциально опасной директивы.
-
php_value allow_url_fopen 0 – отключение потенциально опасной директивы.
-
php_value display_errors 0 – отключение вывода ошибок в браузер.
-
php_value file_uploads 1 – загрузка по 1 файлу за раз (методом post).
-
php_value magic_quotes_gpc 1 – функция которая автоматически экранирует данные GET, POST, COOKIE.
-
php_value magic_quotes_runtime 0 – избавление от ошибок, “магические кавычки”
-
php_value upload_max_filesize 20M – устанавливаем максимальное значение загружаемых файлов (по умолчанию в основном 8М)
-
php_value post_max_size 10M – максимальное значение постинга (по умолчанию в основном 2М)
-
php_value max_execution_time 100 – максимальный лимит времени (в секундах), для выполнения скриптов (по умолчанию в основном 30 секунд).
Все ненужные или вызывающие ошибку строки, вы можете закомментировать или удалить.
Правила обработки запросов для блокировки распространенных эксплоитов:
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code(.*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
-
RewriteCond %{QUERY_STRING} proc/self/environ [OR] – блокировка атак на ваш сайт.
-
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR] – блокировать запрос, который пытается установить значение mosConfig непосредственно через URL.
-
RewriteCond %{QUERY_STRING} base64_(en|de)code(.*) [OR] – заблокировать запрос, который пробует испортить base64_encode через URL
-
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] – заблокировать запрос, который содержащий тег <script> в URL.
-
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] – заблокировать запрос, который пробует установить значение глобальных переменных PHP через URL.
-
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) – заблокировать запрос, который пробует изменить переменную _REQUEST через URL.
-
RewriteRule ^(.*)$ index.php [F] – перенаправлять заблокированные запросы на страницу 403 с запрещенными ошибками.
Блокировка прямого доступа к ядру:
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} .php|.ini|.xml [NC]
RewriteCond %{REQUEST_URI} /components/ [OR]
RewriteCond %{REQUEST_URI} ^/includes/|^/administrator/includes/ [OR]
RewriteCond %{REQUEST_URI} /language/ [OR]
RewriteCond %{REQUEST_URI} /libraries/ [OR]
RewriteCond %{REQUEST_URI} /modules/ [OR]
RewriteCond %{REQUEST_URI} /plugins/ [OR]
RewriteCond %{REQUEST_URI} /templates/ [OR]
RewriteCond %{REQUEST_URI} /cli/
RewriteRule ^(.*)$ index.php [R=404,L]
-
“RewriteCond %{REQUEST_FILENAME} -f” – условие, которое указывает, что все существующие файлы не будут обрабатываться регулярными выражениями.
-
Все остальные строки отвечают за блокировку и перенаправление через index.php, при попытке получить прямой доступ к файлам с расширением .php, .ini, xml и указанным выше папкам.
-
NC – регистро-независимая проверка.
-
OR – условие которое сопоставляется с другими по правилу ИЛИ.
Строки ниже, отвечают за блокирование MySQL инъекций:
RewriteCond %{query_string} concat.*( [NC,OR] RewriteCond %{query_string} union.*select.*( [NC,OR] RewriteCond %{query_string} union.*all.*select [NC] RewriteRule ^(.*)$ index.php [F,L]
Код отвечающий за блокировку файловых инъекций:
RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC] RewriteRule .* – [F]
Запрет доступа к файлам htaccess.txt, configuration.php и php.ini:
RewriteRule ^(htaccess.txt|configuration.php-dist|php.ini)$ – [F]
Раздел SEF ядра Joomla:
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|.(php|html?|feed|pdf|raw|ini|zip|json|file|vcf))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Увеличение скорости сайта с помощью правил в файле .htaccess
Для того, что бы ускорить скорость вашего сайта, мы будем использовать два метода – сжатие и кэширование.
Сжатие:
Сервер Apache может использовать два модуля для сжатия – mod_deflate и mod_gzip. Почти у всех провайдеров они есть по умолчанию, хотя может и не быть. mod_deflate – наиболее распространенный модуль, его мы и рассмотрим первым.
<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css
text/javascript application/javascript application/x-javascript
</ifModule>
С помощью данного модуля мы смогли сжать весь контент, а именно html, css, js. Как видно, для того что бы указать какие файлы необходимо сжимать, мы указали mime type данных файлов. Также можно было добавить изображения или видео, но данная процедура практически бесполезна, так как эти файлы уже довольно хорошо сжаты.
Следующий модуль для Gzip сжатия – mod_gzip. Для корректной работы модуля, добавьте следующие строки в файл .htaccess.
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include mime ^text.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
Хотя данный модуль используется реже, но качество сжатие практически одинаково у обеих модулей.
Примечание: Используя данные модули сжатия, вы сможете существенно ускорить загрузку страниц вашего сайта, так как все, что можно будет сжать – будет сжиматься у вас на сервере и передаваться в браузеры пользователей, но этим самым действием вы увеличите нагрузку на свой сервер. Если у вас в запасе присутствуют дополнительные мощности на сервере – то включаем обязательно, а если нагрузка практически на пике – то стоит быть осторожным, что бы хостер не заблокировал ваш ресурс. Нагрузка может подскочить на 20-60%.
Кэширование:
Кэширование страниц можно включить используя два замечательных модуля – mod_headersи mod_expires. В основном у провайдера стоит хоть один из этих модулей, но во избежание ошибки 500, мы будем использовать проверку наличия модулей.
<ifModule mod_headers.c>
#кэшировать html и htm файлы на один день <FilesMatch “.(html|htm)$”> Header set Cache-Control “max-age=43200” #кэшировать css, javascript и текстовые файлы на одну неделю <FilesMatch “.(js|css|txt)$”> Header set Cache-Control “max-age=604800” #кэшировать флэш и изображения на месяц <FilesMatch “.(flv|swf|ico|gif|jpg|jpeg|png)$”> Header set Cache-Control “max-age=2592000” #отключить кэширование <FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”> Header unset Cache-Control
</FilesMatch>
</ifModule>
По комментарием в коде модуля легко можно понять, что за что отвечает и вы легко сможет настроить временной интервал кэширования под свои нужды.
Рассмотрим следующий модуль отвечающий за кэширование страниц – mod_expires:
<ifModule mod_expires.c>
ExpiresActive On
#по умолчанию кеш в 5 секунд
ExpiresDefault “access plus 5 seconds”
#кэшировать флэш и изображения на месяц
ExpiresByType image/x-icon “access plus 2592000 seconds”
ExpiresByType image/jpeg “access plus 2592000 seconds”
ExpiresByType image/png “access plus 2592000 seconds”
ExpiresByType image/gif “access plus 2592000 seconds”
ExpiresByType application/x-shockwave-flash “access plus 2592000 seconds”
#кэшировать css, javascript и текстовые файлы на одну неделю
ExpiresByType text/css “access plus 604800 seconds”
ExpiresByType text/javascript “access plus 604800 seconds”
ExpiresByType application/javascript “access plus 604800 seconds”
ExpiresByType application/x-javascript “access plus 604800 seconds”
#кэшировать html и htm файлы на один день
ExpiresByType text/html “access plus 43200 seconds”
#кэшировать xml файлы на десять минут
ExpiresByType application/xhtml+xml “access plus 600 seconds”
</ifModule>
Все закомментированные строки можно удалить.
Ниже я выложил готовый файл .htaccess. Если есть вопросы – пишите в комментариях.
Обязательно посмотрите какие блоки кода вам действительно необходимы, отнеситесь с вниманием к файлу .htaccess.
———————————————————————————————————————————
##файл .htaccess для Joomla. Создан на сайте http://max-joomla.ru
##Может быть закомментировано, если вызывает ошибку сервера. Возможность использовать
##символические ссылки на каталоги или файлы, которые не находятся в пределах корня
##вашего сайта. Запрет на листинг каталогов.
Options +FollowSymLinks -Indexes
##
## Кодировка по умолчанию
AddDefaultCharset utf-8
##
## Включение модуля mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
##
##Корневая директория – начало
RewriteBase /
##Корневая директория конец
##Редирект с index.php на / – начало
RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^index.php$ http%2://vash-sayt.com/ [R=301,L]
##Редирект с index.php на / – конец
##Редирект с www на без www – начало
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
##Редирект с www на без www – конец
</IfModule>
## Конец модуля mod_rewrite
##Индексная страница
DirectoryIndex index.php
##
## Настройки хостинга – начало
<ifModule mod_php.c>
php_value register_globals 0
php_value safe_mode 0
php_value allow_url_fopen 0
php_value display_errors 0
php_value file_uploads 1
php_value magic_quotes_gpc 1
php_value magic_quotes_runtime 0
php_value upload_max_filesize 20M
php_value post_max_size 10M
php_value max_execution_time 100
php_flag register_globals Off
php_flag display_errors Off
php_flag file_uploads On
php_flag allow_url_fopen off
php_flag magic_quotes_gpc On
php_flag magic_quotes_runtime Off
</ifModule>
## Настройки хостинга – конец
## Правила обработки запросов для блокировки распространенных эксплоитов – начало
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code(.*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
## Правила обработки запросов для блокировки распространенных эксплоитов – конец
##Блокировка прямого доступа к ядру – начало
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} .php|.ini|.xml [NC]
RewriteCond %{REQUEST_URI} /components/ [OR]
RewriteCond %{REQUEST_URI} ^/includes/|^/administrator/includes/ [OR]
RewriteCond %{REQUEST_URI} /language/ [OR]
RewriteCond %{REQUEST_URI} /libraries/ [OR]
RewriteCond %{REQUEST_URI} /modules/ [OR]
RewriteCond %{REQUEST_URI} /plugins/ [OR]
RewriteCond %{REQUEST_URI} /templates/ [OR]
RewriteCond %{REQUEST_URI} /cli/
RewriteRule ^(.*)$ index.php [R=404,L]
##Блокировка прямого доступа к ядру – конец
##Блокировка MySQL инъекций – начало
RewriteCond %{query_string} concat.*( [NC,OR]
RewriteCond %{query_string} union.*select.*( [NC,OR]
RewriteCond %{query_string} union.*all.*select [NC]
RewriteRule ^(.*)$ index.php [F,L]
##Блокировка MySQL инъекций – конец
##Блокировка файловых инъекций – начало
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule .* – [F]
##Блокировка файловых инъекций -конец
## Запретит доступа к htaccess.txt, configuration.php и php.ini
RewriteRule ^(htaccess.txt|configuration.php-dist|php.ini)$ – [F]
##
## Раздел SEF ядра Joomla – начало
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|.(php|html?|feed|pdf|raw|ini|zip|json|file|vcf))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
##Раздел SEF ядра Joomla – конец
##Ускорение загрузки сайта
##Gzip сжатие с помощью модуля mod_deflate – начало
<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>
##Gzip сжатие с помощью модуля mod_deflate – конец
##Gzip сжатие с помощью модуля mod_gzip – начало
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include mime ^text.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_include mime ^application/x-font-woff.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
##Gzip сжатие с помощью модуля mod_gzip – конец
##Кэширование с помощью модуля mod_headers – начало
<ifModule mod_headers.c>
#кэшировать html и htm файлы на один день
<FilesMatch “.(html|htm)$”>
Header set Cache-Control “max-age=43200”
</FilesMatch>
#кэшировать css, javascript и текстовые файлы на одну неделю
<FilesMatch “.(js|css|txt)$”>
Header set Cache-Control “max-age=604800”
</FilesMatch>
#кэшировать флэш и изображения на месяц
<FilesMatch “.(flv|swf|ico|gif|jpg|jpeg|png)$”>
Header set Cache-Control “max-age=2592000”
</FilesMatch>
#отключить кэширование
<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>
Header unset Cache-Control
</FilesMatch>
</IfModule>
##Кэширование с помощью модуля mod_headers – конец
##Кэширование с помощью модуля mod_expires – начало
<ifModule mod_expires.c>
ExpiresActive On
#по умолчанию кеш в 5 секунд
ExpiresDefault “access plus 5 seconds”
#кэшировать флэш и изображения на месяц
ExpiresByType image/x-icon “access plus 2592000 seconds”
ExpiresByType image/jpeg “access plus 2592000 seconds”
ExpiresByType image/png “access plus 2592000 seconds”
ExpiresByType image/gif “access plus 2592000 seconds”
ExpiresByType application/x-shockwave-flash “access plus 2592000 seconds”
#кэшировать css, javascript и текстовые файлы на одну неделю
ExpiresByType text/css “access plus 604800 seconds”
ExpiresByType text/javascript “access plus 604800 seconds”
ExpiresByType application/javascript “access plus 604800 seconds”
ExpiresByType application/x-javascript “access plus 604800 seconds”
#кэшировать html и htm файлы на один день
ExpiresByType text/html “access plus 43200 seconds”
#кэшировать xml файлы на десять минут
ExpiresByType application/xhtml+xml “access plus 600 seconds”
</ifModule>
В данном материале мы рассмотрим эффективные способы защиты сайта, разработанного на CMS Joomla, которые реализуются с помощью настроек (специальных правил), прописанных в конфигурационном файле веб-сервера htaccess.
В интернете очень много всевозможных материалов, в которых описываются методы защиты сайта, различных инструкций, направленных на повышение безопасности сайта, некоторые из этих способов защиты характерны для всех сайтов, а некоторые — только для сайтов, реализованных на конкретной CMS (системе управления сайтом). Даже я уже рассказывал о том, как защитить сайт на CMS WordPress в материале «17 способов защиты сайта на WordPress».
Сегодня мы поговорим о том, как защитить сайт, который реализован на CMS Joomla.
Однако в данном материале я не буду рассказывать об общих мерах безопасности, которые обязательно должны соблюдаться на сайте, к таким относится:
- Использование не стандартного логина администратора сайта;
- Использование сложных паролей как для админ-панели сайта, так и для панели управления хостингом, включая сложный пароль для базы данных. Также рекомендуется периодически менять все пароли (раз в 3-4 месяца);
- Актуальная версия CMS, шаблона, всех компонентов, плагинов и других расширений, т.е. все это должно постоянно и своевременно обновляться;
- Использование HTTPS;
- Хранение на сервере только тех расширений, плагинов и компонентов, которые задействованы (т.е. все, что не используется, необходимо удалять);
- Использование не стандартного префикса для таблиц в базе данных.
Но это, как я уже отметил, общие меры, к безопасности сайта нужно подходить индивидуально, так как сайты разные и функционал на них тоже разный, поэтому и способы защиты будут также отличаться. Например, у Вас обычный небольшой сайт (блог), на котором отсутствует регистрация пользователей, на сайт информацию добавляете только Вы и функционала на Вашем блоге не так много, поэтому в данном случае имеет смысл запретить использование некоторых PHP функций или просто задать более строгие настройки для PHP. В случае с крупным сайтом или с интернет магазином эту меру безопасности скорей всего не получится выполнить, так как настройки PHP ограничивают некоторые возможности сайта.
В этом материале я расскажу о тех способах защиты сайта, созданного на Joomla, которые можно реализовать с помощью настройки только одного конфигурационного файла – это htaccess.
.htaccess – это файл для дополнительной конфигурации веб-сервера. Не имеет расширения, и точка в начале файла обязательна. Параметры, заданные с помощью файла htaccess, действуют на все файлы в каталоге, в котором располагается файл htaccess, а также на все, что расположено во всех подкаталогах.
Некоторые из рассмотренных сегодня директив файла htaccess можно использовать и для сайтов, работающих на других CMS, но некоторые написаны исключительно для Joomla.
Все, рассмотренное в данной статье, — это, конечно же, не предел, работать над безопасностью сайта можно практически бесконечно, я покажу только способы, которые, на мой взгляд, эффективные и ими стоит пользоваться.
Заметка! ТОП 5 популярных CMS для блога.
Содержание
- Директивы htaccess для защиты сайта на Joomla
- Basic HTTP аутентификация для входа в админ-панель Joomla
- Запрет просмотра содержимого директорий
- Запрет доступа к файлу htaccess
- Блокировка инструментов взлома по USER AGENT
- Базовая, стандартная защита от вредоносных запросов к сайту
- Дополнительная защита от вредоносных запросов к сайту
- Базовая защита от SQL инъекций
- Запрет на визуальный просмотр расположения позиций модулей в шаблоне
- Защита системных файлов и каталогов
- Ограничение доступа к файлам и каталогам, которые доступны пользователю
- Запрет запуска сторонних PHP файлов для всего сайта
- Расширенная защита от вредоносных запросов и SQL инъекций
- Блокировка плохих поисковых ботов по USER AGENT
Перечисленные ниже настройки разрабатывались для обычного блога на Joomla и они точно работают на хостинге REG.RU. Однако применение некоторых директив может вызвать некие проблемы в работе сайта, я это будут пояснять.
Basic HTTP аутентификация для входа в админ-панель Joomla
Первое, что необходимо сделать для повышения безопасности сайта, причем который работает на любой CMS не только на Joomla, – это добавить дополнительную HTTP аутентификацию для входа в административную часть сайта (админ-панель). Тем самым Вы значительно усложняете действия злоумышленников, которые будут проводить брутфорс атаку на сайт, т.е. подбора пароля к учетной записи администратора сайта. Также в случае таких атак дополнительная HTTP аутентификация снизит нагрузку на сервер, так как все запросы по подбору пароля будут прерваны еще на уровне работы протокола http.
Только в этом случае, как Вы понимаете, для входа в админ-панель Вам необходимо будет два раза вводить логин и пароль, причём они должны быть разные – это очень важно!
Для того чтобы добавить Basic HTTP аутентификация на вход в админ-панель Joomla необходимо создать отдельный файл .htaccess в каталоге «administrator».
Файл должен содержать следующие директивы
AuthType Basic AuthName "Доступ запрещён!" AuthUserFile /Абсолютный_путь_к_файлу/.htpasswd Require valid-user
Где
- AuthType Basic — тип аутентификации, т.е. базовая;
- AuthName «Доступ запрещён!» – сообщение, которое будет появляться при обращении к админ-панели сайта;
- «/Абсолютный_путь_к_файлу/.htpasswd» — это абсолютный путь к файлу .htpasswd, в котором хранится в зашифрованном виде логин и пароль, которые будут использоваться для аутентификации. Сгенерировать содержимое файла можно с помощью специального сервиса — http://www.htaccesstools.com/htpasswd-generator/
- Require valid-user – директива говорит о том, что доступ разрешен только пользователям, которые предоставят логин и пароль, указанные в файле .htpasswd.
Запрет просмотра содержимого директорий
Эти и все последующие директивы мы будет писать в файле .htaccess, который расположен в корне Вашего сайта.
В данном случае сначала мы активируем RewriteEngine, а затем запрещаем просмотр содержимого директорий сайта, даже если в директории отсутствуют индексные файлы, в браузере на клиенте ничего не отобразится.
RewriteEngine On #Запрет просмотра содержимого директорий IndexIgnore * Options +FollowSymLinks All -Indexes
Запрет доступа к файлу htaccess
Доступ к файлу htaccess должен быть запрещён, поэтому мы принудительно пропишем следующую директиву
#Запрет доступа к файлу .htaccess <Files .htaccess> order allow,deny deny from all </Files>
Блокировка инструментов взлома по USER AGENT
Следующей директивой мы блокируем известные приложения по USER AGENT, которые используются для взлома сайтов, это только небольшая часть, Вы, конечно же, можете самостоятельно дополнять данный перечень. Кстати, ниже в разделе по расширенной защите представлен другой способ блокировки вредоносных приложений по USER AGENT и там указаны дополнительные юзер агенты подобных утилит.
#Блокируем инструменты взлома SetEnvIf user-agent "Indy Library" stayout=1 SetEnvIf user-agent "Wget" stayout=1 SetEnvIf user-agent "libwww-perl" stayout=1 SetEnvIf user-agent "Download Demon" stayout=1 SetEnvIf user-agent "GetRight" stayout=1 SetEnvIf user-agent "GetWeb!" stayout=1 SetEnvIf user-agent "Go!Zilla" stayout=1 SetEnvIf user-agent "Go-Ahead-Got-It" stayout=1 SetEnvIf user-agent "GrabNet" stayout=1 SetEnvIf user-agent "TurnitinBot" stayout=1 deny from env=stayout
Базовая, стандартная защита от вредоносных запросов к сайту
Здесь перечислены стандартные директивы безопасности для Joomla.
#Базовая защита RewriteCond %{QUERY_STRING} proc/self/environ [OR] RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR] RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*([^)]*) [OR] # RewriteCond %{QUERY_STRING} base64_encode(.*) [OR] # RewriteCond %{QUERY_STRING} base64_decode(.*) [OR] RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) RewriteRule .* index.php [F]
Дополнительная защита от вредоносных запросов к сайту
В данном случае мы еще больше фильтруем «плохие» входящие запросы, и в случае если они попадают под фильтр, блокируем их.
#Блокируем плохие запросы RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(..//?)+ [OR] RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC] RewriteRule .* - [F] RewriteCond %{QUERY_STRING} =PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC] RewriteRule .* - [F]
Базовая защита от SQL инъекций
Добавляем базовую защиту от SQL инъекций
#Простая защита от SQL инъекций RewriteCond %{QUERY_STRING} concat[^(]*( [NC,OR] RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR] RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC] RewriteRule .* - [F]
Запрет на визуальный просмотр расположения позиций модулей в шаблоне
Если добавить к адресу сайта в строке запроса ?tp=1, то можно посмотреть все позиции, на которых могут располагаться модули в данном шаблоне, данную возможность лучше отключать, например следующим образом
#Запрещаем визуальный просмотр расположения позиций модулей RewriteCond %{QUERY_STRING} (^|&)tmpl=(component|system) [NC] RewriteRule .* - [L] RewriteCond %{QUERY_STRING} (^|&)t(p|emplate|mpl)= [NC] RewriteRule .* - [F]
Защита системных файлов и каталогов
Для того чтобы ограничить доступ к системным файлам и каталогам, пишем следующие директивы
#Запрещаем доступ к htaccess.txt, configuration.php, configuration.php-dist и php.ini RewriteRule ^(htaccess.txt|configuration.php(-dist)?|php.ini)$ - [F] #Защищаем системные файлы и папки RewriteRule ^administrator/?$ - [L] RewriteRule ^administrator/index.(php|html?)$ - [L] RewriteRule ^administrator/index[23].php$ - [L] RewriteRule ^administrator/(components|modules|templates|images|plugins)/([^/]+/)*([^/.]+.)+(jp(e?g|2)?| png|gif|bmp|css|js|swf|html?|mp(eg?|[34])|avi|wav|og[gv]|xlsx?|docx?|pptx?|zip|rar|pdf|xps|txt|7z|svg|od[tsp]| flv|mov|ico)$ - [L] RewriteRule ^administrator/ - [F] RewriteRule ^xmlrpc/(index.php)?$ - [L] RewriteRule ^xmlrpc/ - [F] RewriteRule ^includes/js/ - [L] RewriteRule ^(cache|includes|language|libraries|logs|tmp)/ - [F]
Ограничение доступа к файлам и каталогам, которые доступны пользователю
В дополнение к защите системных файлов и папок, добавим еще и ограничение на доступ к файлам и папкам, к которым пользователь должен иметь доступ, но полный доступ, например, прямой запуск PHP скриптов, ему точно не нужен. Поэтому нужно поставить ограничение.
Однако некоторые шаблоны и расширения могут требовать прямого доступа к PHP файлам, поэтому в таких случаях у Вас могут возникнуть проблемы в работе сайта, но так делают только не очень ответственные разработчики шаблонов и расширений. Таким образом, после того как Вы пропишите данные директивы, проверяйте работоспособность сайта, и если все хорошо, то обязательно оставляйте данное ограничение.
#Защищаем файлы и папки, которые доступны пользователю RewriteRule ^(components|modules|plugins|templates)/([^/]+/)*([^/.]+.)+(jp(e?g|2)?|png|gif|bmp|css|js| swf|html?|mp(eg?|[34])|avi|wav|og[gv]|xlsx?|docx?|pptx? |zip|rar|pdf|xps|txt|7z|svg|od[tsp]|flv|mov|ico)$ - [L] RewriteRule ^(components|modules|plugins|templates)/ - [F]
Запрет запуска сторонних PHP файлов для всего сайта
В данном случае мы запретим запускать сторонние PHP файлы для всего сайта, если, конечно, они явно не разрешены.
#Запрет запуска сторонних PHP файлов для всего сайта RewriteCond %{REQUEST_FILENAME} .php$ RewriteCond %{REQUEST_FILENAME} !/index[23]?.php$ RewriteCond %{REQUEST_FILENAME} !/fpa-[a-z]{2}.php RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^([^/]+/)*([^/.]+.)+php$ - [F]
Расширенная защита от вредоносных запросов и SQL инъекций
Для более эффективной защиты от вредоносных запросов и SQL инъекций можно в htaccess прописать следующие директивы, в которых мы уже будем проверять не только строку запроса, но и тип запроса, и юзер агент приложения, с помощью которого осуществляется обращение к сайту. С помощью данных директив мы блокируем известные популярные программы-скрипты, которые используются для взлома сайтов.
Как показывает практика, обычные «нормальные» запросы к сайту блокироваться не будут.
#Расширенная защита от плохих запросов ServerSignature Off RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR] RewriteCond %{THE_REQUEST} (\r|\n|%0A|%0D) [NC,OR] RewriteCond %{HTTP_REFERER} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR] RewriteCond %{HTTP_COOKIE} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR] RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|”>|”<|/|\..\).{0,9999} [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^$ [OR] RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (libwww-perl|curl|wget|python|nikto|scan) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR] #Дополнительная защита от SQL инъекций RewriteCond %{QUERY_STRING} (;|<|>|’|”|)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/*| union|select|insert|cast|set|declare|drop|update|md5|benchmark) [NC,OR] RewriteCond %{QUERY_STRING} ../.. [OR] RewriteCond %{QUERY_STRING} (localhost|loopback|127.0.0.1) [NC,OR] RewriteCond %{QUERY_STRING} .[a-z0-9] [NC,OR] RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC] RewriteRule .* index.php [F]
Блокировка плохих поисковых ботов по USER AGENT
В случае если у Вас неоправданно возросла нагрузка на сервер, то Вы можете немного снизить эту нагрузку путем блокировки ненужных поисковых ботов. Например, после анализа логов веб-сервера Вы обнаружили, что некоторые поисковые боты слишком настойчиво посещают Ваш сайт, и если это не основные роботы поисковых систем или это роботы неизвестных Вам систем, то можете смело их блокировать следующим способом (Подробно про такую блокировку я рассказывал в материале «Как заблокировать поисковых ботов по User-Agent с помощью htaccess?»).
Также в случае выявления факта вредоносной активности с определенных IP адресов, Вы можете заблокировать эти IP адреса, т.е. доступ к Вашему сайту с этих адресов будет полностью закрыт.
#Определяем плохих поисковых ботов RewriteEngine on SetEnvIfNoCase User-Agent "DotBot/1.1" bad_bot SetEnvIfNoCase User-Agent "SemrushBot/2~bl" bad_bot SetEnvIfNoCase User-Agent "AhrefsBot/5.2" bad_bot #Блокируем IP адреса и плохие поисковые боты <Limit GET POST PUT HEAD> order allow,deny allow from all deny from env=bad_bot Deny from 1.1.1.1 </LIMIT>
Где вместо 1.1.1.1 напишите IP адрес злоумышленника, которого Вы хотите заблокировать.
Также если кому интересно, как можно очень эффективно, быстро и просто снизить нагрузку на CPU хостинга, если у Вас WordPress, можете почитать материал — «Оптимизация WordPress – быстрый способ снизить нагрузку на CPU хостинга».
Если Вы знаете ещё дополнительные способы защиты сайта на Joomla, которые можно прописать в файле htaccess, то делитесь в комментариях, спасибо!
У меня все, надеюсь, материал был Вам полезен, пока!