.htaccess это файл устанавливающий конфигурацию сервера apache на уровне директории. Он позволяет веб-мастерам определять различные правила редиректа, авторизации, кэширования, компрессии и многие другие параметры. Правила htaccess применяются конкретно к той директории и ее содержимому в которой он находится. Это делает их удобным инструментом для настройки поведения веб-сайта без необходимости изменения глобальной конфигурации сервера.
Комментарии в htaccess
Как и во многих других программных файлах в .htaccess присутствуют комментарии.
Закомментированные строки файла начинаются с символа #, в основном они несут пояснительный характер. Но также бывает, что комментарии несут функциональную нагрузку.
Давайте рассмотрим такой пример.
Данный кусок куда прописан в стандартном htaccess файле для cms платформы wordpress.
Как мы видим комментарии здесь присутствуют для того , чтобы разграничивать пользовательский код и написанный создателями движка.
Код между комментариями может быть автоматически изменен при обновлении системы.
Поэтому если вы хотите дополнить этот файл, стоит это делать до или после этого блока.
Редиректы
С помощью правил RewriteRule можно выполнять перенаправления URL, например, с HTTP на HTTPS, с www на без www, добавлять или удалять слеш в конце URL и многое другое.
Начнем пожалуй с 300ых редиректов.
- 300 — сообщает, что по искомому запросу можно перейти не на одну, а на несколько альтернативных страниц;
- 301 — постоянный редирект
- 302 — временный
- 303 — редирект на похожую по содержанию страницу
- 305 — подключение через прокси.
Благодаря 300ым редиректам можно сообщать об изменении адреса контента без потерь качества SEO.
Допустим у вас изменилось название рубрики, или вы решили поменять структуру ссылок на своей cms, без изменений в htaccess. Ссылочный профиль этих страниц будет потерян, и работы по seo которые продвигали этот товар или страницу просто пропадут.
Благодаря редиректам мы можем решить эту проблему.
Редирект с http:// на https://
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
В данном примере при помощи Rewrite правил происходит редирект c http на https.
RewriteEngine on - указывает что перенаправления должны быть включены на сервере, если это не так.
RewriteCond - команда обозначающая, то правило после выполнения которого будет начинаться исполнение команды RewriteRule
RewriteRule - команда задающая шаблон переадресации (то куда будут перенаправляться запросы).
Переменные окружения записываются в формате %{переменная}.
В квадратных скобках записывается код перенаправления.
Редирект с www на адрес сайта без www
RewriteCond %{HTTP_HOST} ^www.(.)$
RewriteRule ^(.)$ https://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
Редирект со страницы со слешем на страницу без слеша
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
Это основные случаи переадресации которые могут вам пригодиться при настройке сайта на apache.
Авторизация htaccess
Авторизация: Apache .htaccess позволяет задавать правила доступа к директориям с помощью файлов .htpasswd, обеспечивая защиту от несанкционированного доступа.
AuthName "Stop"
AuthType Basic
AuthUserFile "/.htpasswd"
require valid-user
В данном примере мы задаем имя авторизированной папки
тип аутентификация и файл в котором должны быть записаны логины и пароли.
содержимое файла .htpasswd выглядит примерно так: логин: пароль.
Сжатие данных на стороне сервера при помощи htaccess
В файле .htaccess мы можем прописать правила, благодаря которым сервер апачи будет сжимать данные перед отправкой пользователю. Это проиcходит при помощи модулей mod_deflate и mod_gzip
AuthName "Stop"
AuthType Basic
AuthUserFile "/.htpasswd"
require valid-user
В данной команде после слова deflate следует формат данных, которые следует обрабатывать в этом модуле. Указание правил для модуля gzip выглядит похожим образом.
<ifModule mod_gzip.c>
<ifmodule>
Запрет доступа к важным файлам извне
При помощи конфигурационного файла можно запреть доступ к важным системным файлам, которые хранят конфиденциальную информацию необходимую для работы окружения.
Пример такой команды:
<files example.json>
Deny from all
</files>
Этот код в файле указывает на то, что доступ к файлу settings.json на сервере запрещен для всех пользователей. Давайте разберем каждую строку подробнее:
<files example.json>#- это директива, указывающая на то, что далее будут указаны правила для файла example.json. В данном случае, мы хотим применить определенные настройки к файлу example.json.#
Deny from all # - это правило, которое запрещает доступ ко всем пользователям к файлу settings.json. Таким образом, любой запрос к этому файлу будет отклонен и пользователь не сможет получить доступ к его содержимому.
В данной статье мы рассмотрели основные сценарии в настройке .htccess , которые рано или поздно понадобятся веб мастеру.
Будьте внимательны и проверяйте работу сервера каждый раз когда вы добавляете и изменяете конфигурационный файл. Ведь подобные манипуляции могут запросто нарушить работу сервера.
С полным списком директив, которые вы сможете использовать с своем конфигурационном файле вы сможете ознакомиться на сайте httpd.apache.org