Файл htaccess для Joomla - кэширование, безопасность, редирект

 В предыдущей статье было рассмотрено, что такое файл htaccess и для чего он нужен, а также был приведен пример содержание базового файла, который уже присутствует в базовой сборке Joomla 3. В данной статье рассмотрим данный файл подробнее – в частности, как с его помощью задействовать такие полезные функции сервера как сжатие и кэширование страниц, настроить редирект и другие полезные функции.

Настраиваем 301 редирект при помощи файла htaccess

Для настройки редиректа страниц в файле htaccess применяется директива RewriteCond и RewriteRule. Настроить перенаправление можно достаточно просто. В данном примере я покажу, как настроить 301 редирект с сайта www.joom4all.ru на сайт joom4all.ru таким образом можно избежать дублей и указать главное зеркало сайта. Делается это следующим образом:

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Данные строчки кода сообщают серверу, что необходимо перенаправить посетителя сайта, который обратился к нему по адресу с «www» на сайт без этих символов. Хочу заметить, что для того чтобы данный код сработал перед ним должны располагаться следующие строки:

Options +FollowSymLinks
RewriteEngine On

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

Redirect 301 /старая-страница.html http://сайт.ru/новая-страница.html

Данный метод не совсем удобен, если необходимо делать редирект на множество страниц, размер файла htaccess может сильно раздуться, а для пары страниц вполне подойдет.

Настройка безопасности сайта на Joomla при помощи файла htaccess

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

Запрет доступа к конфигурационным файлам

Для того чтобы настроить запрет на прямой доступ к файлам конфигурации таким как htaccess.txt, configuration.php и php.ini достаточно написать всего одну строчку которая выглядит так:

RewriteRule ^(htaccess\.txt|configuration\.php-dist|php\.ini)$ - [F]

Параметр [F] говорит о том, что сервер должен вернуть 403 ошибку при попытке доступа к перечисленным файлам.

Блокировка прямого доступа к ядру

В данном случае код будет несколько крупнее, чем в предыдущем случае, так как надо перечислить основные директории. В общем, описывать подробности не вижу смысла, просто запоминаем, что данный код так же необходим для Joomla 3.

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 инъекций.
##Блокировка 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

Включение Gzip сжатия позволит значительно ускорить скорость загрузки сайта, а это тем самым повлияет на количество отказов, а, следовательно, на ранжирование сайта в поисковой выдаче. В данном примере я приведу два способа включения сжатия при помощи модулей mod_deflate и mod_gzip.

##Сжатие с помощью модуля mod_deflate
<ifModule mod_deflate.c> #Проверка установки на сервере данного модуля
#уменьшаем строчки кода скомпилированных HTML файлов, удаляя пустые строки, переходы и пробелы.
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule> #Завершаем работу с модулем

##Сжатие с помощью модуля mod_gzip
<IfModule mod_gzip.c> #Проверка установки на сервере модуля mod_gzip
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> #Завершаем работу с модулем mod_gzip

Два модуля используется на тот случай, если какой-либо из них не установлен на веб-сервере. Их суть идентична – сократить строки кода за счет удаления пустых строк, пробелов и переходов.

Как включить кэширование браузера при помощи htaccess?

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

Для включения кэширования можно воспользоваться модулем mod_expires. Для этого в файл htaccess необходимо добавить следующие строчки кода (пояснения смотрим в комментариях):

#Кэширование с помощью модуля mod_expires - начало
<ifModule mod_expires.c> #Проверка на наличие модуля на веб-сервере
ExpiresActive On
#кэшировать изображения на месяц
ExpiresByType images/jpg "access plus 2592000 seconds"
ExpiresByType images/jpeg "access plus 2592000 seconds"
ExpiresByType images/png "access plus 2592000 seconds"
ExpiresByType images/gif "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> # Закончили работу с модулем

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

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

#Перечисляем расширения файлов подлежащих кэшированию
<filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
#Устанавливаем время жизни кэша на месяц
Header set Cache-Control "max-age=2592000, public"
</filesMatch> #Закончили работу

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

Пример готового файла htaccess для Joomla 3 я приведу в следующей статье.

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