access – это конфигурационный файл, который позволяет изменять и дополнять настройки веб-сервера Apache. Вносимые изменения в файл не затрагивают весь сервер, а только тот каталог (и его дочерние элементы), в котором он расположен. То есть, изменения касаются какого то определённого сайта.

Для чего нужен?

С помощью htaccess сайт настраивается по определённым требованиям сеошников и разработчиков:

  1. Настройка редиректов. Это может быть перенаправление домена с www на без-www. При установке ssl сертификата с http на https.
  2. Кеширование. Позволяет задавать настройки для использования кеша браузера, что значительно ускоряет работу сайта.
  3. Сжатие. Настройка сжатия файлов сайта с помощью mod_gzip или mod_deflate. В итоге, при обращении к сайту, сервер выдаст нам сжатую версию веб-ресурса, что так же сокращает скорость загрузки. Но может увеличить нагрузку на процессор сервера.
  4. Запрет доступа. Ограничение доступа к определённым файлам или ресурсу в целом по ip адресам, защита директорий паролем.
  5. Ошибки сервера. Обработка таких ошибок как 404, 500 и пр, перенаправление пользователя на страницу «заглушку».
  6. Установка кодировки документов.

Правила использования

  • Перед комментарием ставится знак #
  • Путь к файлам указывается с корня сервера
  • Название домена прописывается с указанием протокола: http// или https//

Как создать файл?

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

  1. Открыть любой текстовый редактор. Это может быть Brackets, Notepad++ или даже Блокнот.
  2. Сохранить файл, указав в качестве имени .htaccess (в начале имени точка обязательна). Тип файла нужно указать «Все файлы»
  3. Проверьте правильность сохранения — файл НЕ должен быть в формате «.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.