Сейчас для организации работы подавляющего большинства сайтов в сети используется веб-сервер Apache. Он немного отстает в производительности, но зато очень прост в настройке и имеет огромное количество возможностей.
Веб-сервер Apache можно настраивать не только в главном конфигурационном файле, но и через файлы .htaccess. Эти файлы размещаются в определенных папках и указывают веб-серверу как нужно себя вести в этой папке и ее подкаталогах.
Настройка файла htaccess очень похожа на настройку главного файла конфигурации Apache. Но она немного отличается. С помощью этого файла вы можете настроить редиректы, внутреннее изменение url, права доступа, авторизацию по паролю и многое другое. В сегодняшней статье мы рассмотрим как правильно настроить htaccess для вашего сервера.
Содержание статьи
- Синтаксис файла htaccess
- Настройка доступа htaccess
- Модификация URL в htaccess
- Настройка редиректов в htaccess
- Настройка страниц ошибок в htaccess
- Кэширование в htaccess
- Сжатие файлов в htaccess
- Выводы
Синтаксис файла htaccess
Мы уже начали тему настройки Apache в одной из предыдущих статей, но сегодня немного освежим информацию и рассмотрим более детально именно настройку htaccess.
Все директивы из файла htaccess выполняются точно так же, как если бы они были размещены в глобальном конфигурационном файле, только внутри директивы <Directory адрес_папки_htaccess>. Это не позволяет менять глобальные настройки, но вы можете очень тонко настроить поведение программы в папках, к которым у вас есть права доступа.
Общий синтаксис директив очень прост, это пары команд и их опций, разделенных пробелом, например:
Команда параметр1 параметр2 флаги
Самих команд достаточно много и мы будем рассматривать их на примерах действий, которые они выполняют. Кроме самих команд, тут могут использоваться вложенные структуры, например, для активации модулей или проверки доступности того или иного модуля. А теперь давайте перейдем ближе к тому как выполняется правильная настройка htaccess. Начнем с самых простых действий.
Настройка доступа htaccess
Довольно часто htaccess используется для управления доступом к папке. Для управления доступом используются три команды:
- order - порядок;
- deny - запретить;
- allow - разрешить.
Сначала, с помощью опции order, нужно указать в каком порядке будут выполняться директивы, значение имеет только эта команда, и неважно в какой последовательности они расположены в файле.
Затем с помощью директивы allow или deny мы разрешаем или запрещаем доступ к папке с определенных адресов. Например, чтобы запретить все необходимо добавить в htaccess:
Но мы также можем разрешить доступ только с локальной сети:
Если указано deny,allow, то проверка будет выполняться в таком порядке. Сначала все директивы deny, затем все директивы allow, и если ни одно из условий не подошло, то запрос пропускается.При allow,deny такой запрос будет по умолчанию отклонен. Например, предыдущий пример можно написать так:
Модификация URL в htaccess
Наиболее часто htaccess используется для модификации URL во время выполнения или редиректов. За эту функциональность отвечает модуль mod_rewrite и обычно он активирован в большинстве конфигураций Apache.
Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase, которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule - изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.
Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:
Укажем, что в качестве префикса для URL нужно использовать корень:
И будем автоматически заменять URL адреса с index.html на index.php, обратите внимание, что исходный URL - это путь к запрашиваемому файлу относительно расположения файла htaccess:
Для более эффективной замены можно использовать регулярные выражения они состоят из специальных символов и переменных и обычных символов и цифр. Рассмотрим основные специальные символы:
- ^ - начало строки;
- $ - конец строки;
- . - любой символ;
- * - любое количество любых символов;
- ? - один определенный символ;
- [0-9] - последовательность символов, например, от 0 до 9;
- | - символ или, выбирается или одна группа, или другая;
- () - иcпользуется для выбора групп символов.
В регулярных выражениях htaccess также можно использовать переменные с данными, полученными из заголовков запроса, например:
- %{HTTP_USER_AGENT} - поле User-Agent, которое передает браузер пользователя;
- %{REMOTE_ADDR} - IP адрес пользователя;
- %{REQUEST_URI} - запрашиваемый URI;
- %{QUERY_STRING} - параметры запроса после знака ?.
Это наиболее часто используемые переменные, но их есть намного больше, остальные вы можете найти в официальной документации. Регулярные выражения открывают более широкие возможности, например, вы можете заменять во всех страницах html на php:
Директива RewriteCond дает еще больше гибкости, вы можете выбрать к каким адресам стоит применять модификацию, например, будем переопределять данные только для версии с www:
Таким образом, вы можете выполнять любые преобразования ваших URL без фактических редиректов куда-либо. Но дальше мы рассмотрим как делать редиректы.
Настройка редиректов в htaccess
Настройка редиректов htaccess выполняется похожим образом, с помощью того же самого модуля mod_rewrite, только теперь вместо модификации url мы указываем флаг с нужным действием и кодом редиректа.
Самый простой редирект можно выполнить без mod_rewrite, с помощью такой строки:
Но обычно нужны перенаправления с более широким действием. Все выглядит очень похоже, только теперь мы используем флаг [NC] чтобы не учитывать регистр, [L] для прекращения обработки и [R] - для редиректа. Например, перенаправление htaccess с версии без www на домен с www:
Значение R=301 означает код редиректа, который будет возвращен клиенту, можно использовать 301, 302 и т д. Редирект htaccess с домена www на домен без префикса будет выглядеть так:
Таким же образом можно сделать переадресацию:
Редирект с http версии на https:
Настройка страниц ошибок в htaccess
При возникновении каких-либо ошибок во время генерации страницы, веб-сервер выдает краткое сообщение и код ошибки. Но пользователям будет намного понятнее в чем дело, если вы сделаете для каждой ошибки отдельную страницу с картинками и полноценным объяснением.
Настройка htaccess для этого пункта будет очень полезной. Вы можете использовать директиву ErrorDocument. С помощью нее можно задать html страницы для ошибок 4хх и 5хх. Например, для 404:
Кэширование в htaccess
Браузер позволяет хранить в своем кэше изображения, файлы скриптов, стилей и другие медиафайлы определенное время. Время жизни кэша задается веб-сервером с помощью специальных заголовков. Их можно настроить с помощью модуля expires.
Сначала активируем модуль и устанавливаем период кэширования по умолчанию:
Теперь мы можем настроить кэширование для каждого mime типа файлов:
В первой строке мы указываем, что страницы html нужно считать годными на один месяц 15 дней и два часа с момента загрузки. Доступны такие типы файлов:
- image/x-icon;
- image/jpeg;
- image/png;
- image/gif;
- application/x-shockwave-flash;
- text/css;
- text/javascript;
- application/javascript;
- application/x-javascript;
- text/html;
- application/xhtml+xml;
Чтобы быть уверенным что эта конструкция не вызовет ошибок заключите ее в if:
Сжатие файлов в htaccess
Для сжатия в Apache можно использовать модуль deflate. Здесь достаточно просто перечислить mime типы файлов, которые нужно сжать. Например:
Вы также можете заключить конструкцию if, чтобы проверить поддерживается ли этот модуль:
Выводы
В этой статье мы рассмотрели как выполняется настройка файла htaccess для правильной работы вашего сайта. Все действия выполняются не так уже и сложно. Достаточно скопировать несколько строк и исправить их под свои нужды. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение предлагаю видео с обзором конфигурационного файла Apache:
Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали




Познавательная статья!
Спасибо большое за проделанную работу и предоставленную помощь новичкам!
Очень помогла статья!
Добрый день. Подскажите пожалуйста как сделать редирект на сайт: https://www.site.ru c 1) http://site.ru 2) http://www.site.ru 3) https://site.ru ?
У вас в статье походу ошибка
"
RewriteBase /;
RewriteCond % {REMOTE_HOST} ^www.site.ru$
RewriteRule ^(.*)\.html$ $1.php
"
вместо REMOTE_HOST должно стоять HTTP_HOST
поправьте меня, если я ошибаюсь, и желательно с объяснениями
Не ошибаетесь, исправил.
Сделайте статью как работать с CORS очень важная тема для меня, front на одном сервере а backend api на другом сервере
Зачем так мучаться? я себе вот тут https://c-wd.ru/tools/htaccess/ за одну минуту сгенирировал .htaccess
Подскажите, как сделать, чтобы файл .htaccess не менялся автоматически сервером. У меня периодически в этой файл добавляются строчки:
# php -- BEGIN cPanel-generated handler, do not edit
# Сделайте пакет «ea-php54» языком программирования «PHP» по умолчанию.
AddHandler application/x-httpd-ea-php54 .php .php5 .phtml
# php -- END cPanel-generated handler, do not edit
Из-за этого сайт перестает работать (белый экран и все), т.к. скрипт написан на php 5.2.
Приходится периодически удалять эти строки когда они добавляются.
Фёдор, необходимо размещать ваши параметры после
# php -- END cPanel-generated handler, do not edit
или до
# php -- BEGIN cPanel-generated handler, do not edit
Внутри данных строк хостинг будет редактировать параметры по своему желанию.
Ну или просто смените хостинг
Добрый день.
Подскажите, пожалуйста, как создать редирект с сайта
https://site.ru/moscow на сайт https://moscow.site.ru
Очень полезная статья, наконец-то смог настроить сжатие файлов