Работаю в хостинге: размещаем сайты пользователей на своих серверах.
Ввиду гигантского количества вопросов, которые нам задают и начинающие, и опытные пользователи, при помощи Пикабу хочу разъяснить некоторые принципы, аспекты и особенности этого ответвления IT-сферы. Не уверен, что количество вопросов от наших пользователей уменьшится, но попытаться стоит.
Даже если вы не пользуетесь хостингом, предположу, что эта информация может быть познавательна.
Веб-мастера, плотно работающие с сайтами, не раз сталкивались с ситуациями, когда унифицированные настройки веб-сервера, на котором работает текущий проект, вполне себе устраивают большую часть пользователей сервера, но конкретно проекту веб-мастера подходят не полностью. При этом чаще всего, если проект размещён на shared-хостинге (о видах хостинга я писал ранее), писать в тех. поддержку хостера запрос на изменение нужных настроек не имеет смысла: в таких изменениях, скорее всего, будет отказано. Также не совсем рационально вносить изменения самостоятельно, если используется VDS или Dedicated с несколькими проектами на борту: новые настройки могут сломать старые проекты.
В этом случае на помощь веб-мастеру приходит файл дополнительной децентрализованной настройки веб-сервера. Называется он «.htaccess» (обратите внимание на точку в начале названия файла, её наличие для его корректной работы обязательно).
ВНИМАНИЕ! AHTUNG! WARNING! УВАГА! 注意!
Перед тем, как продолжить, сразу расставлю все точки над «ё»: файл проверенно работает с веб-сервером apache (и частично с некоторыми другими).
Но есть хостеры, которые на shared-хостинге не дают использовать функционал этого файла вообще. Их мало, но они есть. Поэтому, если вы знаете, что проект в теории может потребовать нестандартных решений в плане настроек, то перед заказом услуг хостинга уточните у хостера, разрешён ли у них .htaccess.
Вольное определение.
.htaccess — текстовый файл дополнительной конфигурации, позволяющий изменить или задать различные параметры для изменения работы веб-сервера.
Примерная схема работы.
Веб-сервер, при обнаружении файла в каталоге сайта, считывает его содержимое и применяет все возможные инструкции, которые находит в нём, к текущему сайту. Если при последующей работе с сайтом во вложенной папке сайта обнаружен ещё один файл .htaccess, то директивы такого файла в текущей папке перекрывают директивы расположенного выше, но работают только на текущую папку и все вложенные в неё папки.
Если директива из файла веб-сервером по какой-то причине не распознаётся, то работа веб-сервера с сайтом экстренно прерывается, и веб-сервер возвращает клиенту страницу со статусом 500 - «Внутренняя ошибка сервера» (Internal server error).
Что умеет этот файл?
Очень кратко по самым часто используемым возможностям.
1. Управлять ЧПУ.
Красота сайта кроется не только в его дизайне, но в том числе и во внешнем виде ссылок на внутренние страницы сайта. Набор правильных директив в файле .htaccess позволит избавиться в адресной строке от конструкций вида:
http://экзампл.рф/index.php?a=view&m=13321&ex=mobile
и сделать её такой:
http://экзампл.рф/mobile/13321/
Пример на рабочем сайте:
2. Разграничение доступа к папкам.
Можно сделать директорию сайта или весь сайт целиком доступным по паролю с использованием встроенного в веб-сервер apache механизма авторизации. Это может быть очень полезно, если вы не хотите заморачиваться с написанием своей собственной авторизации.
#################
AuthName "Resticted area! PIKABU users only!"
AuthType Basic
AuthUserFile /home/u12345/example.ru/pass/.htpasswd
require valid-user
#################
3. Запрет на доступ к определённым файлам и запрет хотлинкинга.
Если, например, сайт генерирует файлы с отчётами или резервные копии и складывает их в какую-то папку, то через htaccess можно запретить доступ к таким файлам, чтобы скачивать их можно было только через FTP-доступ или просаматривать через серверную консоль. Также htacces позволяет запретить так называемый хотлинкинг, когда файлы с вашего сайта (к примеру, картинки) подключаются на страницах другого сайта.
Так запретим хотлинкинг картинок:
#################
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?экзампл.рф [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
#################
4. Собственные страницы ошибок.
Стандартные страницы веб-сервера с ошибками (403 — Forbidden, 404 — Not Found и т. д.) просты и лаконичны. Но иногда хочется чуть сложнее и при этом красивее.
5. Перенаправление посетителя на сторонний ресурс, внутреннюю страницу или другой протокол при каких-то особых условиях.
Подключили SSL и нужно заставить всех пользователей ходить на ваш сайт именно по безопасному протоколу? Можно сделать так, что он сам этого не заметит:
#######################################
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
#######################################
6. Переопределение стартовой страницы сайта.
Для любителей назвать индексный файл this_file_starts_my_website_view.php
#######################################
DirectoryIndex this_file_starts_my_website_view.php
#######################################
7. Запрет доступа к всему сайту или определённым его страницам для определённого пользователя (или группы пользователей, объединённых общим признаком). А также разрешение доступа определённому пользователю к определённым областям сайта:
Резюмируя.
В умелых руках этот файл позволяет решать довольно много различных ситуаций. По сути, его возможности упираются только в ограничения, которые накладывает на этот файл хостер.
Файл также умеет:
- заставлять браузер кэшировать содержимое сайта на опеределённое время;
- архивировать передавыемые пользователю данные для сокращения потребляемого трафика;
- управлять роботами различных поисковых систем;
- изменять некоторые настройки используемых языковых интерпретаторов (php, perl, python и т.д.);
И многое-многое-многое-многое другое.
Тема весьма и весьма широкая, поэтому оставлю некоторые полезные ссылки для самостоятельного изучения. Я постоянно использую их сам, т.к. весь объём этих данных в голове не укладывается.
http://www.htaccess.net.ru/ — про htaccess по-русски и в понятной форме изложения.
http://htaccess.ru/cms/ — стандартные файлы htaccess для некоторых распространённых CMS.
http://www.opennet.ru/base/faq/htaccess_howto.txt.html — для олдфагов.
https://habrahabr.ru/post/154643/ — для профессионалов.
Если про что-то забыл, не ругайте сильно. Есть вопросы? Добро пожаловать в комментарии.