Файл .htaccess один из ключевых инструментов настройки веб-сайта на сервере Apache. С его помощью можно управлять поведением сайта без изменения глобальной конфигурации сервера. Это особенно удобно, если у вас нет доступа к основным конфигурационным файлам Apache или если нужно быстро изменить правила работы сайта.
В этой статье разберёмся, как включить поддержку .htaccess, создать файл, а также рассмотрим основные сценарии его использования.
Что такое .htaccess
.htaccess - это конфигурационный файл Apache, который применяется на уровне конкретного каталога. Он начинается с точки, поэтому по умолчанию считается скрытым файлом в Linux-системах.
С помощью .htaccess можно делать следующее:
настраивать редиректы URL;
создавать собственные страницы ошибок;
защищать директории паролем;
добавлять MIME-типы;
включать server-side includes (SSI);
управлять правилами переписывания URL.
Все настройки из .htaccess применяются к каталогу, в котором находится файл, и ко всем его вложенным папкам.
Включение поддержки .htaccess
По умолчанию Apache может игнорировать .htaccess. Чтобы сервер начал читать этот файл, необходимо разрешить переопределение конфигурации.
Откройте конфигурацию виртуального хоста:
sudo nano /etc/apache2/sites-available/your_domain.confТипичный файл может выглядеть так:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>Добавьте внутрь блока VirtualHost секцию Directory:
<Directory /var/www/your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>Самая важная директива здесь:
AllowOverride AllОна разрешает .htaccess изменять настройки Apache. После изменения конфигурации перезапустите Apache:
sudo service apache2 restartСоздание файла .htaccess
Файл должен находиться в корневой директории сайта.
/var/www/your_domain/.htaccessСоздать его можно так:
sudo nano /var/www/your_domain/.htaccessВажно помнить:
имя файла должно быть точно
.htaccess;без расширений вроде
.txt.
Все правила, записанные в этом файле, будут применяться к каталогу и его подпапкам.
Основные сценарии использования .htaccess
Переписывание URL (mod_rewrite)
Одна из самых популярных возможностей .htaccess это изменение структуры URL. Например, можно направить один адрес на другой:
RewriteEngine On
RewriteRule ^oranges.html$ apples.htmlВ этом случае при переходе на oranges.html пользователь фактически увидит содержимое страницы apples.html.
Эта технология используется во многих CMS и фреймворках для создания чистых URL.
Защита директорий паролем
С помощью .htaccess можно ограничить доступ к определённым разделам сайта.
Для этого используется файл .htpasswd, где хранятся логины и зашифрованные пароли.
Создать файл можно командой:
sudo htpasswd -c /etc/apache2/.htpasswd usernameПосле этого добавьте в .htaccess:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-userТеперь при попытке открыть каталог сервер будет запрашивать логин и пароль.
Пользовательские страницы ошибок
Apache позволяет показывать стандартные страницы ошибок, но их можно заменить на собственные.
Часто настраивают:
400 - Bad Request
401 - Authorization Required
403 - Forbidden
404 - Not Found
500 - Internal Server Error
Пример настройки:
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.htmlЭто позволяет показать пользователю более понятную страницу вместо стандартного сообщения сервера.
Добавление MIME-типов
Иногда сервер не знает, как обрабатывать определённые типы файлов. В этом случае можно добавить MIME-тип вручную.
Например:
AddType audio/mp4a-latm .m4aТеперь Apache будет корректно отдавать файлы .m4a.
Server Side Includes (SSI)
SSI позволяют автоматически вставлять один фрагмент HTML в несколько страниц.
Например, для общего футера сайта.
В .htaccess можно включить обработку SSI:
AddType text/html .shtml
AddHandler server-parsed .shtmlПосле этого файлы с расширением .shtml будут анализироваться сервером.
Если вы не хотите переименовывать .html файлы, можно использовать режим:
XBitHack onЗатем нужно выставить исполняемый бит для страницы:
chmod +x page.htmlТеперь Apache будет проверять этот файл на наличие SSI.
Влияние .htaccess на производительность и безопасность
Несмотря на гибкость, .htaccess имеет свои особенности.
Производительность
Каждый раз при загрузке страницы Apache проверяет наличие .htaccess в текущем каталоге и во всех родительских папках. Это может слегка замедлить работу сервера.
На современных серверах это обычно почти незаметно, но при высокой нагрузке рекомендуется переносить правила в основной конфигурационный файл Apache.
Безопасность
Плюс .htaccess в том, что изменения применяются сразу и не требуют перезапуска сервера.
Однако это означает, что пользователи, имеющие доступ к файлу, могут менять конфигурацию сервера на уровне сайта. Поэтому доступ к нему должен быть строго ограничен.