Среди различных инструментов для настройки вашего веб-сервера, конфигурационный файл .htaccess является бесценным помощником. С его помощью можно быстро изменить типы документов, парсеры, перенаправления URL и многие другие важные функции.
Дизайнеры или разработчики, не обладающие техническими знаниями, могут не углубляться в управление собственным файлом .htaccess. Однако эта тема сама по себе увлекательна и стоит изучения.
В этой статье мы представим некоторые полезные концепции для дизайнеров и разработчиков. Любой, кто запускает свой веб-сайт на сервере Apache, должен понимать, как управлять своим файлом .htaccess. Он предоставляет множество возможностей для настройки и может работать практически с любыми языками веб-программирования.
Зачем использовать файл .htaccess?
Это отличный вопрос, и, возможно, нам стоит начать с ответа на вопрос: «что такое файл .htaccess?».
.htaccess — это особый конфигурационный файл, используемый веб-сервером Apache. Он может указывать веб-серверу, как представлять различные формы информации и как обрабатывать различные заголовки HTTP-запросов.
На самом деле, это средство децентрализации для организации настроек веб-сервера. Один физический сервер может содержать 50 различных веб-сайтов, каждый со своим файлом .htaccess. Это дает веб-мастерам много возможностей, которые в противном случае были бы невозможны.
Но почему вы должны его использовать?
Основная причина — безопасность
Вы можете заблокировать доступ к определенным директориям или сделать их защищенными паролем. Это отлично подходит для частных проектов или новых систем управления контентом (CMS), где требуется дополнительная безопасность. Но также существуют общие задачи, такие как перенаправление сообщений об ошибке 404 на определенную веб-страницу.
Это требует всего одной строки кода и может значительно повлиять на то, как посетители реагируют на отсутствующие страницы.
Честно говоря, я не могу сказать много, чтобы убедить вас в важности понимания файла .htaccess. Но как только вы увидите его в действии, вы сможете оценить всю ценность этого маленького конфигурационного файла.
Надеюсь, оставшаяся часть этой статьи представит некоторые полезные темы, которые помогут веб-мастерам разобраться в управлении конфигурацией .htaccess.
Разрешить/Запретить доступ
Возможно распознать потенциальных спамеров и запретить им доступ к вашему веб-сайту. Это может быть немного экстремальным решением. Однако, если вы знаете, что человек или группа людей нацелены на ваш сайт, у вас есть несколько вариантов.
Вы можете выбрать доменное имя для запрета или заблокировать посетителей по IP-адресу.
```apache
order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all
```
Обратите внимание, что во втором IP-адресе отсутствует четвертое число. Этот блок кода будет нацеливаться на первый IP (255.0.0.0) и все IP-адреса в диапазоне 123.45.6.0-255, а затем разрешать весь остальной трафик.
Предотвращение листинга директорий
Иногда у вас может быть открытая директория, которая настроена для просмотра по умолчанию. Это означает, что пользователи могут видеть все файлы, перечисленные внутри внутренней структуры каталогов, например, в вашей папке с изображениями.
Некоторые разработчики не хотят разрешать листинг директорий, и, к счастью, код для этого довольно легко запомнить.
```apache
Options -Indexes
```
Этот ответ был представлен бесчисленное количество раз, и он, возможно, является одним из самых простых правил .htaccess для запоминания.
На самом деле, можно создавать несколько файлов .htaccess внутри каждой из этих директорий, чтобы, например, одна из них была защищена паролем, а другие — нет. И вы все равно можете оставить опцию Options -Indexes, чтобы посетители не могли просматривать вашу папку /images/.
Защита паролем
Защита ваших директорий паролем — это очень распространенная процедура для обеспечения безопасности административных зон и других важных папок вашего веб-сайта. Иногда вы хотите предоставить доступ только небольшой группе людей.
В других случаях пароли предотвращают доступ хакеров к панели администрирования вашего веб-сайта. В любом случае, это очень мощное решение для множества проблем.
Для этого мы можем добавить следующее правило:
```apache
AuthType Basic
AuthName "This Area is Password Protected"
AuthUserFile /full/path/to/.htpasswd
Require valid-user
```
Обратите внимание, что нам нужно предоставить файл с именем .htpasswd. Этот файл должен содержать имя пользователя и хешированный пароль для предоставления доступа. К счастью, вы можете использовать внешний инструмент, который позволяет легко сгенерировать его.
Безопасность для WordPress
Чтобы эффективно использовать идею защиты паролем, рассмотрим реальный пример. Этот более сложный фрагмент кода потребует аутентификации пользователей для доступа к файлу wp-login.php в WordPress.
Вы найдете оригинальный источник на сайте Ask Apache, где есть множество других фрагментов кода для защиты WordPress.
```apache
<Files wp-login.php>
Order Deny,Allow
Deny from All
Satisfy Any
AuthName "Protected By AskApache"
AuthUserFile /web/askapache.com/.htpasswda1
AuthType Basic
Require valid-user
</Files>
```
И если вы собираетесь следовать этим правилам .htaccess, может также помочь защита паролем административной зоны. Обычно файл wp-login.php будет получать больше всего попыток взлома с помощью перебора паролей.
Так что даже приведенные выше примеры кода будут более чем достаточной дополнительной защитой для вашего веб-сайта на WordPress.
Правила переписывания URL для HTTP/HTTPS
Переписывание URL, вероятно, одно из самых распространенных применений файлов .htaccess. По умолчанию, установки WordPress могут генерировать файл .htaccess прямо из панели администрирования. Это позволяет создавать красивые URL, которые не имеют структуры .php?p=1.
Рассмотрим этот пример переписывания URL, чтобы обновить подчеркивания на тире, так как он содержит много важных элементов.
RewriteEngine и RewriteBase почти всегда можно устанавливать на эти значения. Но вам нужно включить RewriteEngine, чтобы все остальные правила работали.
Есть множество руководств онлайн, объясняющих, как включить mod_rewrite, и ваш провайдер хостинга также может помочь.
Обратите внимание, что синтаксис следует шаблону RewriteRules в начале. Эти правила используются для совпадения с запросами, отправляемыми как HTTPS-запросы. Они отвечают на RewriteRule, которая в данном случае перенаправляет все на домен d.com.
Заключительные скобки, такие как [R=301,L], называются флагами переписывания, которые важны, но это более продвинутая тема.
```apache
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule !\.(html|php)$ - [S=4]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]
RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) https://d.com/$1 [R=301,L]
```
Если вы хотите углубиться в тему, вы можете найти длинный список флагов на этой [шпаргалке](https://httpd.apache.org/docs/current/rewrite/flags.html).
Синтаксис mod_rewrite определенно немного запутан, но не пугайтесь! Примеры могут выглядеть гораздо проще в других контекстах.
Когда вы только начинаете, я рекомендую использовать это [веб-приложение для генерации mod_rewrite кода](https://htaccess.madewithlove.be/), которое помогает генерировать примеры кода, используя реальные URL.
Это отличный инструмент, потому что вы можете посмотреть различные элементы в синтаксисе, чтобы понять, что они делают в правилах Rewrite.
Но не пытайтесь сразу загрузить себя всем этим. Может потребоваться более 3-4 месяцев, чтобы действительно начать понимать, как переписывать URL с помощью [0-9a-zA-Z]+ и подобных шаблонов. Продолжайте практиковаться, и со временем, вы поймете это так, как будто это общеизвестные знания.
Установка DirectoryIndex
Вы можете указать Apache, какие документы следует рассматривать в первую очередь как "главные" документы с помощью директивы DirectoryIndex. Обычно вы захотите указать файлы с именем index, такие как index.html и index.php.
```apache
DirectoryIndex index.html index.php
```
Порядок документов должен начинаться с самого важного и переходить к наименее важному. В приведенном выше примере, если у нас нет HTML, то запасным вариантом будет index.php. И вы даже можете назвать эти файлы home.php или другим именем — это будет валидный синтаксис.
Принудительное использование поддомена "www" или "non-www"
Google может работать с обеими версиями вашего домена, если вы не указываете www.domain.com или просто domain.com. По моему опыту, лучше всего выбрать одну из этих версий и установить ее как единственный вариант через .htaccess.
Таким образом, Google не будет индексировать различные URL, указывающие как на поддомен WWW, так и без него.
```apache
Принудительное использование поддомена WWW
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]
Без поддомена
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain.com$ [NC]
RewriteRule ^(.*)$ https://domain.com/$1 [L,R=301]
```
Этот фрагмент кода взят из архива CSS-Tricks и предоставляет очень удобное решение.
Обновите домен на тот, который вам нужен для вашего веб-сайта. В противном случае возникнут проблемы, и вы заметите их сразу! Но я настоятельно рекомендую использовать один из этих двух вариантов, и это в верхней части моего списка задач после запуска нового веб-сайта.
Принудительное скачивание медиафайлов
Еще один довольно важный фрагмент позволяет принудительно скачивать определенные типы медиафайлов вместо их отображения в браузере.
Сразу же на ум приходят PDF-документы и MP3-аудиофайлы, которые могут быть представлены в формате для скачивания, но как заставить их скачиваться?
```apache
AddType application/octet-stream .zip .mp3 .mp4
```
Не стесняйтесь добавлять больше типов файлов в конец этой строки. Все медиаформаты, использующие MIME-тип octet-stream, будут скачиваться. Принудительное использование этого через .htaccess — это очень прямой способ гарантировать, что люди не смогут просматривать эти файлы в браузере.
Пользовательские страницы ошибок
Еще одна последняя часть, это полный шаблон пользовательских страниц ошибок. Обычно эти коды ошибок видны только на стороне сервера. Но есть множество этих страниц ошибок, с которыми вам стоит ознакомиться.
Некоторые примеры могут включать ошибки 403/404 и перенаправление 301.
Этот шаблон кода ошибок начинается с 100 и поднимается до 500 ошибок. Обратите внимание, что вам, очевидно, не нужны все эти коды. Только самые распространенные ошибки будут необходимы, и, возможно, несколько редких фрагментов, если вы сочтете это нужным.
Если вы не узнаете код, просто найдите его на Википедии, чтобы лучше понять.
```apache
ErrorDocument 100 /100_CONTINUE
ErrorDocument 101 /101_SWITCHING_PROTOCOLS
ErrorDocument 102 /102_PROCESSING
ErrorDocument 200 /200_OK
ErrorDocument 201 /201_CREATED
ErrorDocument 202 /202_ACCEPTED
ErrorDocument 203 /203_NON_AUTHORITATIVE
ErrorDocument 204 /204_NO_CONTENT
ErrorDocument 205 /205_RESET_CONTENT
ErrorDocument 206 /206_PARTIAL_CONTENT
ErrorDocument 207 /207_MULTI_STATUS
ErrorDocument 300 /300_MULTIPLE_CHOICES
ErrorDocument 301 /301_MOVED_PERMANENTLY
ErrorDocument 302 /302_MOVED_TEMPORARILY
ErrorDocument 303 /303_SEE_OTHER
ErrorDocument 304 /304_NOT_MODIFIED
ErrorDocument 305 /305_USE_PROXY
ErrorDocument 307 /307_TEMPORARY_REDIRECT
ErrorDocument 400 /400_BAD_REQUEST
ErrorDocument 401 /401_UNAUTHORIZED
ErrorDocument 402 /402_PAYMENT_REQUIRED
ErrorDocument 403 /403_FORBIDDEN
ErrorDocument 404 /404_NOT_FOUND
ErrorDocument 405 /405_METHOD_NOT_ALLOWED
ErrorDocument 406 /406_NOT_ACCEPTABLE
ErrorDocument 407 /407_PROXY_AUTHENTICATION_REQUIRED
ErrorDocument 408 /408_REQUEST_TIME_OUT
ErrorDocument 409 /409_CONFLICT
ErrorDocument 410 /410_GONE
ErrorDocument 411 /411_LENGTH_REQUIRED
ErrorDocument 412 /412_PRECONDITION_FAILED
ErrorDocument 413 /413_REQUEST_ENTITY_TOO_LARGE
ErrorDocument 414 /414_REQUEST_URI_TOO_LARGE
ErrorDocument 415 /415_UNSUPPORTED_MEDIA_TYPE
ErrorDocument 416 /416_RANGE_NOT_SATISFIABLE
ErrorDocument 417 /417_EXPECTATION_FAILED
ErrorDocument 422 /422_UNPROCESSABLE_ENTITY
ErrorDocument 423 /423_LOCKED
ErrorDocument 424 /424_FAILED_DEPENDENCY
ErrorDocument 426 /426_UPGRADE_REQUIRED
ErrorDocument 500 /500_INTERNAL_SERVER_ERROR
ErrorDocument 501 /501_NOT_IMPLEMENTED
ErrorDocument 502 /502_BAD_GATEWAY
ErrorDocument 503 /503_SERVICE_UNAVAILABLE
ErrorDocument 504 /504_GATEWAY_TIME_OUT
ErrorDocument 505 /505_VERSION_NOT_SUPPORTED
ErrorDocument 506 /506_VARIANT_ALSO_VARIES
ErrorDocument 507 /507_INSUFFICIENT_STORAGE
ErrorDocument 510 /510_NOT_EXTENDED
```
Существует множество ресурсов в Интернете, обсуждающих файлы .htaccess. Но продолжайте практиковаться с новыми идеями и не бойтесь тестировать фрагменты кода. Пока у вас есть резервная копия файла, вы можете пробовать что угодно, и это будет увлекательный опыт обучения.
Использование файла .htaccess является важным инструментом для настройки вашего веб-сервера, особенно если вы управляете сервером VPS. С его помощью вы можете осуществлять перенаправление URL, защищать паролем важные директории и настраивать главную страницу сайта. На хостинге для VPS вы получаете полный контроль над сервером, что позволяет вам максимально использовать возможности .htaccess для повышения безопасности и оптимизации производительности вашего сайта. Независимо от того, являетесь ли вы дизайнером или разработчиком, понимание и управление .htaccess на VPS откроет перед вами широкие возможности для кастомизации и улучшения вашего веб-пространства.