Проверка работы htaccess и сжатие для ускорения сайта.

Поговорим откровенно, ДА, про htaccess и сжатие.

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

На простом хостинге помимо вашего сайта на сервере находится еще два десятка других сайтов. Все они разные по мощности, организованности и трафику.

И когда ваш сосед  запускает на своем хостинге сложные или избыточные в алгоритмах скрипты, это отзывается и на вас.

Файл .htaccess позволяет изменять многие настройки вашего сайта … как настройки веб-сервера Apache, так и опции PHP.htaccess и сжатиеВы можете использовать htaccess с разными настройками для разных каталогов.

В корне сайта вы можете объявить -Indexes, а в избранных каталогах создать ещё один файл .htaccess и в нем объявить +Indexes.

Помните!

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

Как правило, файл .htaccess создается в корневой директории сайта и иногда в директориях, которые требуют специфического поведения веб-сервера .

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

На заметку.

Некоторые FTP-клиенты считают файлы, начинающиеся с точки, скрытыми и не отображают их по умолчанию. В таких случаях для того, чтобы видеть файл .htaccess, необходимо в настройках FTP-клиента включить настройку «Отображать скрытые файлы».

На заметку.

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

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

Для под-домена наследуются настройки .htaccess домена.

На заметку.

При открытии директории без указания конкретного файла веб-сервер ищет файлы index.htm, index.html, index.php для отображения (индексные файлы).

Если индексные файлы отсутствуют, сервер возвращает ошибку 403 Forbidden, так как отображение списка файлов в директории по умолчанию запрещено.

Чтобы ошибка 403 Forbidden не отображалась, либо создайте в директории индексный файл, либо добавьте в файле .htaccess опцию:
Options +Indexes

Установка индексного файла для сайта

По умолчанию индексным файлом вашего сайта веб-сервер считает файл (в порядке приоритета): index.html, index.php.

Чтобы установить в качестве индексного файла произвольный файл, следует добавить инструкцию:
DirectoryIndex имя_файла.
Например, следующая инструкция предписывает веб-серверу при обращении к сайту открывать в качестве индексной страницы скрипт на языке Perl, размещенный в директории cgi-bin вашего сайта:
DirectoryIndex /cgi-bin/engine.pl

Как включить отображение ошибок PHP?

Для отображения ошибок PHP добавьте в файл .htaccess директиву:

php_value display_errors 1

Как изменить максимальный размер загружаемых файлов в PHP?

Максимальный размер загружаемых файлов указывается в .htaccess с помощью двух директив:
php_value upload_max_filesize 20M
php_value post_max_size 20M
Вместо 20M укажите желаемый размер ограничения. Значение этих параметров не может быть больше 50M. Обратите внимание, что символ «M» (латинская M) указывается слитно со значением.

Как указать интерпретатору PHP необходимость обрабатывать не только файлы .php?

Чтобы заставить интерпретатор PHP обрабатывать файлы с произвольным расширением, нужно добавить соответствующую инструкцию в файл .htaccess, расположенный в корневой директории вашего сайта.

Например, следующая инструкция укажет интерпретатору PHP на необходимость обрабатывать файлы с расширением .phtml:
AddType application/x-httpd-php .phtml

Как изменить время хранения сессий PHP

Изменение времени хранения сессий может потребоваться, например, если вы хотите, чтобы данные об авторизации пользователей на вашем сайте сохранялись дольше.

По умолчанию время хранения сессий — 1440 секунд (24 минуты), cookie с идентификатором сессии — до закрытия браузера пользователем.

Для изменения времени хранения сессий PHP необходимо внести несколько изменений в .htaccess.

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

Возможно, непосредственно для вашего сайта более эффективным окажется альтернативный механизм хранения данных, привязанных к посетителю (например, только через cookie), либо альтернативный механизм хранения сессий PHP (установленный с помощью session_set_save_handler()).

Для изменения времени хранения сессий добавьте в .htaccess следующие директивы:

# Создайте отдельную директорию для хранения сессий вашего сайта,
# например, domains/ВАШ_САЙТ/tmp. Это необходимо, чтобы PHP не удалял сессии сайта
# при очистке старых сессий других сайтов, работающих на аккаунте.
# Установите директорию хранения сессий для сайта с помощью session.save_path.
php_value session.save_path /home/ВАШ_ЛОГИН/domains/ВАШ_САЙТ/tmp
# Установите максимальное время жизни сессии в секундах.
# 604800 — 1 неделя.
php_value session.gc_maxlifetime 604800
# Установите время жизни cookie, которая сохраняет идентификатор сессии
# в браузере пользователя.
php_value session.cookie_lifetime 604800

Обратите внимание: если сессия открывается для каждого не авторизованного пользователя, при большом количестве посетителей и длительном времени сохранения сессий образуется большое количество файлов в папке, указанной в session.save_path.

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

В случае работы с большим количеством сессий мы рекомендуем использовать альтернативные механизмы их хранения и очистки, например:

  1. Указывать вложенность директорий хранения сессий с помощью аргумента N в session.save_path. Очищать старые сессии при этом необходимо собственными скриптами. Более подробная информация об этом методе находится в описании session.save_path в документации PHP.
  2. Реализовать собственный механизм хранения сессий (например, в MySQL) и установить его с помощью session_set_save_handler().

Как включить SSI

Директивы SSI (Server Side Includes) по умолчанию обрабатываются в файлах с расширением .shtml (например, index.shtml). Чтобы SSI обрабатывались и в других файлах, необходимо в файле .htaccess указать следующие директивы:

AddType text/html .html .ssi
AddOutputFilter INCLUDES .html .ssi

Вместо «.ssi .html» укажите расширения файлов, в которых должны обрабатываться директивы SSI.

Обратите внимание:  не рекомендуется использовать в одном и том же файле PHP и SSI одновременно.

выполнения скриптов CGI в какой-либо папке необходимо настроить веб-сервер соответствующим образом с помощью файла .htaccess.

  1. В папке, в которой должны выполняться скрипты CGI, создайте файл .htaccess вида: Options +ExecCGI
    AddHandler cgi-script .cgi .pl Вместо «.cgi .pl» укажите список расширений, которые должны обрабатываться как скрипты.
  2. Загрузите скрипты в папку.
  3. С помощью Вашего файлового менеджера установите файлам скриптов права на выполнение (755).

Как изменить ограничение на использование оперативной памяти в PHP?

Для изменения ограничения на оперативную память используйте следующую директиву в .htaccess: php_value memory_limit 128M

Вместо 128M укажите желаемый размер ограничения. Обратите внимание, что символ «M» (латинская M) указывается слитно со значением.

Как сделать так, чтобы сайт всегда открывался по основному имени?

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

RewriteEngine on
RewriteCond %{HTTP_HOST} !^example.com$
RewriteRule ^(.*) http://example.com/$1 [R=301,L]

Замените example.com на основное имя вашего сайта. Теперь при обращении к сайту пользователи будут автоматически перенаправлены на его основное имя.

Немного SEO (куда же без него) 

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^black-web
RewriteRule (.*) [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>

Обязательно не забыть про условие <IfModule mod_rewrite.c>.

Не окажись у хостера данного модуля и ваш сайт станет выдавать 500-ую ошибку. Данный конкретный модуль входить в сборку Апача по-умолчанию. Ну а вдруг… Хостеры и их админы бывают всякие.

В данной части пользы больше для SEO. Модуль rewrite как следует из его названия занимается перенаправлениями

В этой части файла мы указали две склейки: мы склеили ваш_сайт и www.ваш_сайт Даже если пользователь наберет ваш сайт без WWW его перебросить 301 редериктом на www.ваш_сайт.

А также мы избавились /index.php в строке запроса. Если пользователь наберет www.ваш_сайт/index.php его перебросит (снова 301 редериктом) на www.ваш_сайт.

Теперь поисковики не будут путаться между www и не будут дублировать главную страницу в результатах индексирования вашего сайта. Гуглим СЕО склейки домена, если не понимаете зачем это нужно.

Итак…  .htcces и сжатие для ускорения сайта.

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

У Апача есть два модуля сжатия.

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

Наиболее распространен mod_deflate. Чтобы его с помощью сжимать весь контент на вашем сайте добавьте в .htaccess следующие строки:

<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>

Как видите мы должны перечислить mime type файлов, которые следует подвергать сжатию.

Сюда можно добавить и видео и картинки, но толку это даст мало. Потому что jpeg или gif уже сами по себе являются сжатыми форматами. Также как avi или flv. Вы фактически нечего не выиграете указав их.

Второй менее популярный модуль это 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_exclude mime                ^image\.*
mod_gzip_item_exclude rspheader  ^Content-Encoding:.*gzip.*
</IfModule>

Данный модуль умеет работать с масками, что несомненно большой плюс.

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

Я сильной разницы не заметил при тестах. В принципе, все детали Gzip можно очень четко отследить в Page Speed, но так же есть онлайн сервисы, которые способны дать вам информацию о том, включена ли эта архивация или нет.

Можете воспользоваться этим или этим онлайн сервисом для проверки включения сжатия на вашем сервере.

Оказывается можно быстрее … Если применить хеширование страниц.

У хеширования есть и плюсы и минусы, поэтому подходить к этому вопросу надо подготовившись. Для динамически обновляющегося сайт каждый 2-3 минуты, например популярного форума, нужно учесть, что пользователь должен видеть актуальную информацию.

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

В html разметки мы всегда можем использовать meta теги. И через php мы может устанавливать заголовки ответа сервера. Остается вопрос, как быть с css, js, image и т.д. и т.п.

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

Один из модулей обычно стоит у провайдера, но как и в случае с любым модулем, который не входит в стандартную сборку Апача, 100% гарантии никто вам не даст. Поэтому снова во избежание 500й ошибки указывает условия для каждого из модулей.

<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.

В данной секции я отключил хеширование php файлов. Хотя по моему мнению небольшой временной интервал хеширования им не повредит.

5-30 секунд, это интервал времени, за который мало что меняется. А многие пользователи любят пользоваться клавишей back (вернуться назад).

Чтобы не загружать им страницу второй раз, а подхватить её из кеша, разумный интервал кеширования все же уместен. Во второй секции где идут условия для mod_expires я именно так и делаю — для php ставлю небольшой интервал кеширования.

<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 для тех, кто только приступил к изучению данного вопроса, чтобы сэкономить их время на поисках информации по сети.

В результате всех манипуляций имеется такой файл следующего содержания:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
<IfModule mod_deflate.c>
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
</ifmodule>
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault «access plus 5 seconds»
ExpiresByType text/html «access plus 1 seconds»
ExpiresByType image/gif «access plus 2592000 seconds»
ExpiresByType image/jpeg «access plus 2592000 seconds»
ExpiresByType image/png «access plus 2592000 seconds»
ExpiresByType text/css «access plus 604800 seconds»
ExpiresByType text/javascript «access plus 604800 seconds»
ExpiresByType application/x-javascript «access plus 604800 seconds»
<ifModule mod_headers.c>
<filesMatch «\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$»>
Header set Cache-Control «max-age=2592000, public»
</filesMatch>
<filesMatch «\.(css)$»>
Header set Cache-Control «max-age=604800, public»
</filesMatch>
<filesMatch «\.(js)$»>
Header set Cache-Control «max-age=216000, private»
</filesMatch>
<filesMatch «\.(xml|txt)$»>
Header set Cache-Control «max-age=216000, public, must-revalidate»
</filesMatch>
<filesMatch «\.(html|htm|php)$»>
Header set Cache-Control «max-age=1, private, must-revalidate»
</filesMatch>
</ifModule>
</IfModule>
# END WordPress

А вот профессионально написанный .hatcces  https://github.com/Roosso/other/blob/master/.htaccess

По мне многовато там всячины а может и ошибаюсь. Для тех у кого все получилось, идем на www.webpagetest.org и пробуем мерить красоту до и после.

htaccess и сжатие

Думаю, получился у Вас htaccess!

 

Спасибо, что прочитали этот пост, не забудьте подписаться!

ПОДПИСКА

Подписчики получают знаки внимания от нашего коллектива, как полезную информацию и приятные сюрпризы!

Поделиться этой записью

5 коментарий “Проверка работы htaccess и сжатие для ускорения сайта.”

  1. Roosso:

    Привет.

    Заметил только пару ошибок

    1 Вместо 20M укажите желаемый размер ограничения. Значение этих параметров не может быть больше 50M.
    Значение может быть и больше 50M. Не буду утверждать за все сервера. Может на каких то серверах есть такое ограничение?

    2. Итак… .htcces и сжатие для ускорения сайта.
    В этом заголовке в слове .htAccess пропущена буква А

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

scroll to top