access – это конфигурационный файл, который позволяет изменять и дополнять настройки веб-сервера Apache. Вносимые изменения в файл не затрагивают весь сервер, а только тот каталог (и его дочерние элементы), в котором он расположен. То есть, изменения касаются какого то определённого сайта.
Для чего нужен?
С помощью htaccess сайт настраивается по определённым требованиям сеошников и разработчиков:
- Настройка редиректов. Это может быть перенаправление домена с www на без-www. При установке ssl сертификата с http на https.
- Кеширование. Позволяет задавать настройки для использования кеша браузера, что значительно ускоряет работу сайта.
- Сжатие. Настройка сжатия файлов сайта с помощью mod_gzip или mod_deflate. В итоге, при обращении к сайту, сервер выдаст нам сжатую версию веб-ресурса, что так же сокращает скорость загрузки. Но может увеличить нагрузку на процессор сервера.
- Запрет доступа. Ограничение доступа к определённым файлам или ресурсу в целом по ip адресам, защита директорий паролем.
- Ошибки сервера. Обработка таких ошибок как 404, 500 и пр, перенаправление пользователя на страницу «заглушку».
- Установка кодировки документов.
Правила использования
- Перед комментарием ставится знак #
- Путь к файлам указывается с корня сервера
- Название домена прописывается с указанием протокола: http// или https//
Как создать файл?
Особенность файла состоит в том, что у него нет имени, а только расширение. Для того, чтобы создать.htaccess нужно выполнить следующие действия:
- Открыть любой текстовый редактор. Это может быть Brackets, Notepad++ или даже Блокнот.
- Сохранить файл, указав в качестве имени .htaccess (в начале имени точка обязательна). Тип файла нужно указать «Все файлы»
- Проверьте правильность сохранения — файл НЕ должен быть в формате «.txt», т.е. «.htaccess.txt». Если это тау, то переименуйте его.
Всё, файл .htaccess создан. Теперь его можно редактировать. Перед вводом текста, убедитесь, что в редакторе выключена функция переноса по словам.
Примеры использования
Включает работу механизма преобразования
AddDefaultCharset UTF-8
Устанавливает кодировку
AddDefaultCharset UTF-8
Перенаправление домена с www на без-www. Применяют, когда нужно склеить домены, чтобы трафик шел на главное выбранное зеркало, при вводе любого варианта адреса в строку поиска.
RewriteCond %{HTTP_HOST} ^www.your-domain.com
RewriteRule ^(.*)$ http://your-domain.com/$1 [R=301,L]
Переадресация с адреса your-domain.com/index.php на основное зеркало your-domain.com. Используется для исключения дублей главной страницы (нужно для SEO):
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ / [R=301,L]
Кэширование с помощью модуля mod_headers:
<ifModule mod_headers.c>
#кэшировать HTML и htm файлы на 1 день
<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>
#кэшировать Flash и изображения на месяц
<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_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>
Gzip сжатие через mod_deflate (рекомендованное):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/font
AddOutputFilterByType DEFLATE application/font-truetype
AddOutputFilterByType DEFLATE application/font-ttf
AddOutputFilterByType DEFLATE application/font-otf
AddOutputFilterByType DEFLATE application/font-opentype
AddOutputFilterByType DEFLATE application/font-woff
AddOutputFilterByType DEFLATE application/font-woff2
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/woff
AddOutputFilterByType DEFLATE font/woff2
# For Olders Browsers Which Can\'t Handle Compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
</IfModule>
Если ваш сервер не поддерживает mod_deflate, можно попробовать альтернативный вариант 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 ^application/x-javascript.*
mod_gzip_item_include mime ^text/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_include handler ^cgi-script$
</ifModule>
Запрет доступа.
Для всех ко всем файлам в директории:
deny from all
К конкретному файлу:
<Files file.php>
deny from all
</Files>
Запрет всех ip, кроме одного конкретного:
order deny,allow
deny from all
allow from 192.152.37.125
Конечно же это далеко не все возможности файла .htaccess, а самое основное.
Стоит помнить, что для каждой CMS существует своя вариация конфигурации файла. Также у популярных движков есть большое количество плагинов, которые и редиректы настроют, и кеширование с сжатием.
А у некоторых хостинг-компаний также предусмотрен функционал, не требующий вмешательства в .htaccess.