Статьи

Главное руководство по файлам .htaccess

Конфигурационные файлы Apache .htaccess сбили с толку бесчисленное количество разработчиков. Этот урок призван преодолеть эту путаницу, сосредоточившись на примерах и подробных описаниях. Одним из преимуществ изучения конфигурации .htaccess является автоматическая распаковка вашего контента, предоставление более удобных URL-адресов, предотвращение горячих ссылок, улучшение кэширования и многое другое.

Эта статья научит вас настраивать файлы .htaccess вручную, но если вы хотите простое и быстрое решение, попробуйте скачать .htaccess Builder с Envato Market. Он позволяет вам быстро и без усилий доставить файл htaccess без необходимости помнить что-либо о языке сервера Apache, который использовался для создания файла htaccess!

htaccess Builder на рынке Envato
.htaccess Builder на рынке Envato

Я прочитал несколько статей .htaccess онлайн. Я буду бесстыдно признаться
Я не вышел за пределы главной страницы результатов Google. Я был в шоке, когда
Я на самом деле прочитал статьи и обнаружил, что никто из них не объяснил, что на самом деле был Apache
делает. Они были просто набором популярных или полезных трюков или
фрагменты многоразового кода. Это все хорошо, но классический
Аргумент:

«Дайте человеку рыбу, и он будет есть один день. Научи человека ловить рыбу и он
будет есть на всю жизнь. «
Конфуций

В этой статье я постараюсь не просто показать вам примеры полезных
Директивы .htaccess, но объясняют, что именно
продолжается. Таким образом, вы поймете основные принципы и сможете расширить
примеры или создавать новые команды для собственного использования любым творческим или полезным способом
Вы можете придумать.

Я сосредоточусь на Apache 2, однако многое из этого будет применяться
в Apache 1.3, и я постараюсь указать на любые различия, которые я знаю.

Наконец, этот урок будет наиболее полезным, если вы прочитаете его по порядку.
Я пытаюсь связать свои примеры вместе и построить из них, таким
Таким образом, вы можете попробовать их сами и следовать.

Процитирую Apache :

Файлы .htaccess (или «распределенные файлы конфигурации») предоставляют способ
изменения конфигурации для каждого каталога. Файл, содержащий один или несколько
директивы конфигурации, находится в определенном каталоге документов, а
Директивы применяются к этому каталогу и всем его подкаталогам.

«Директивы» — это терминология, которую Apache использует для команд в Apache.
конфигурационные файлы. Обычно это относительно короткие команды, обычно
пары ключ-значение, которые изменяют поведение Apache. Файл .htaccess позволяет
разработчики выполнить кучу этих директив, не требуя доступа к
Файл конфигурации основного сервера Apache, часто называемый httpd.conf. Этот файл,
httpd.conf, как правило, называется «файлом глобальной конфигурации», и я буду
обратитесь к нему с этим именем или его коротким эквивалентом имени файла.

Эта функция идеально подходит для многих хостинг-компаний, которые используют виртуальный хостинг.
окружающая обстановка. Хостинговая компания не позволит своим клиентам получить доступ к
файл глобальной конфигурации, который в конечном итоге затрагивает всех клиентов, размещенных на
этот сервер. Вместо этого, включив .htaccess, они дают каждому из своих клиентов
возможность определять и выполнять свои собственные директивы Apache в своих собственных
каталоги и подкаталоги. Конечно, это также полезно для сингла
разработчик, как вы увидите.

Стоит отметить, что все, что можно сделать с помощью файла .htaccess, может
быть сделано в файле httpd.conf. Тем не менее, НЕ все, что можно сделать в
httpd.conf можно сделать в файле .htaccess. На самом деле .htaccess файлы должны быть
включен в файле httpd.conf для того, чтобы быть выполненным вообще. После включения,
их сила может быть ограничена определенными «контекстами», чтобы им было позволено
переопределить некоторые настройки, но не другие. Это дает системным администраторам
больше контроля над тем, что они позволяют другим разработчикам сойти с рук в их
Файлы .htaccess.

Файлы .htaccess обычно включены по умолчанию. Это на самом деле контролируется
директивой AllowOverride в файле httpd.conf. Эта директива
может быть размещен только внутри раздела <Directory>. Не позволяйте этому запутать
вы. Типичный файл httpd.conf определяет DocumentRoot и большинство
файла будет содержать директивы внутри раздела <Directory>
с этим каталогом. Это включает в себя директиву AllowOverride.

Значением по умолчанию на самом деле является «Все», и, таким образом, файлы .htaccess включаются
дефолт. Альтернативное значение будет «Нет», что будет означать, что они
полностью отключен. Есть множество других значений, которые ограничивают конфигурацию только
определенные контексты. Некоторые:

  • AuthConfig — директивы авторизации, такие как те, которые имеют дело с базовой аутентификацией.
  • FileInfo — директивы, которые касаются настройки заголовков, документов об ошибках, файлов cookie, перезаписи URL и т. Д.
  • Индексы — настройки списка каталогов по умолчанию.
  • Ограничить — контролировать доступ к страницам различными способами.
  • Опции — аналогичный доступ к индексам, но включает даже
    другие значения, такие как ExecCGI, FollowSymLinks, Includes и другие.

Я покажу несколько примеров без соответствующих разделов <Directory>.
Вот пример, который позволяет полное переопределение .htaccess:

И вот пример, который принимает более мелкозернистый подход и позволяет только
переопределение контекстов авторизации и индексов, но не более того:

Первая строка в обоих этих примерах — комментарии Apache. Комментарии начинаются
с символом «#». Это является общим для многих файлов конфигурации и сценариев
языки. У меня будет много комментариев в моих примерах, чтобы помочь объяснить, что делают.
Тем не менее, они не являются обязательными, и это на самом деле просто личное предпочтение того, сколько вы
хочу комментировать. Комментарии не обязательны.

Вторая строка — это сама директива AllowOverride. Это обычный синтаксис
Директива Apache. Сначала идет имя директивы «AllowOverride», за которым следует пробел
разделенный список значений. Хотя этот синтаксис выглядит довольно свободно; всегда будь осторожен

Иногда даже одна ошибка в вашем файле httpd.conf или .htaccess приведет к
временный обвал сервера, и пользователи увидят 500 — внутренние ошибки сервера.

Только по этой причине рекомендуется всегда делать резервную копию ваших файлов httpd.conf и .htaccess, прежде чем вносить изменения или дополнения. Таким образом, если что-то пойдет не так с модификацией, у вас будет
не о чем беспокоиться, потому что вы можете вернуться к своей предыдущей рабочей версии. я буду
также рекомендуем вносить небольшие изменения за раз и проверять, работают ли эти изменения в
увеличивается в отличие от внесения ряда изменений одновременно. Таким образом, если вы делаете
ошибка, будет намного легче отследить, что, возможно, вызвало это.

Если вы когда-либо не понимаете синтаксис какой-либо директивы, немедленно перейдите к
Директива Apache перечисляет и рассматривает «синтаксис», который они перечислили в таблице
для каждой отдельной директивы. Я сделаю все возможное, чтобы попытаться объяснить это здесь
(Я пытаюсь учить), но мое объяснение никогда не может быть так хорошо, как
сама формальная техническая документация. Никогда не бойся документации, это
Ваша самая надежная и заслуживающая доверия ссылка. Я постараюсь сделать вещи интереснее
здесь (уууу!), но, в конце концов, я просто добавляю другие документы.

Вполне возможно, на самом деле очень вероятно, что ваша хостинговая компания не
дать вам доступ к файлу httpd.conf. Так как же узнать, включена ли поддержка .htaccess?
или не? Не волнуйтесь, .htaccess — очень распространенная и полезная функция, которую большинство компаний
включили или включат, если вы попросите вежливо.

Лучше всего просто проконсультироваться с хостинговой компанией. Если это не явно
указан где-нибудь в вашем хостинг-плане, а затем снимать их поддержку по электронной почте. Это относительно распространенное
вопрос, так что они, скорее всего, уже имеют готовый ответ для вас. Они, вероятно, будут готовы
включить услугу или хотя бы указать причину, по которой они могут ее не разрешить.

В любом случае, вы всегда можете попробовать и посмотреть, работает ли простой файл .htaccess!
В образец загрузки этого учебника включены два способа, которые вы можете проверить, чтобы увидеть, если .htaccess
поддержка включена. Это две папки: «is_htaccess_enabled» и «is_htaccess_enabled_2».
Дайте им шанс, я объясню, что каждый здесь делает.

Этот тест очень прост. Он использует директиву, чтобы заставить Apache выглядеть
сначала для файла «index good.html» перед «index.html». Если поддержка .htaccess
Если ваш браузер указывает на папку, Apache загрузит файл .htaccess и узнает, что
должна отобразиться страница «index good.html», содержащая зеленое сообщение «Поздравляем!
Если поддержка .htaccess не включена, то Apache по умолчанию будет игнорировать .htaccess
файл и сразу искать файл index.html.

Директива DirectoryIndex принимает разделенный пробелами список потенциальных имен файлов.
Когда Apache задается URL-адрес каталога, а не прямой страницы (например,
http://www.example.com, а не http://www.example.com/index.html ) Apache будет использовать это
список файлов для поиска нужной страницы для загрузки. Apache будет искать файлы
используя значения в списке слева направо. Первый файл, который видит Apache, существует
будет файл, который он загружает и отображает для клиента.

Используя приведенный выше файл .htaccess, вот пример хорошего (включенного) и плохого (отключенного) случаев:

Хороший Apache Redirected
Плохой htaccess игнорируется

Как я уже говорил ранее, синтаксическая ошибка в вашем файле .htaccess приведет к сбоям в работе сервера.
Вы можете использовать это в своих интересах, чтобы проверить, включена ли на вашем сервере поддержка .htaccess!
Вот пример файла .htaccess, который должен взорваться.

Совершенно очевидно, что «AHHHHHHH» не является действительной директивой Apache. Это приведет к
ошибка, если Apache пытается прочитать файл .htaccess! Итак, если вы вернетесь на страницу с криком
«Internal Server Error», то ваш сервер ищет файлы .htaccess! Если вы на самом деле
посмотрите содержимое файла index.html, тогда вполне вероятно, что они были отключены. Здесь снова хорошие и плохие случаи:

Хорошая Внутренняя Ошибка Обслуживания
Плохой htaccess игнорируется

Наконец, все еще возможно, что поддержка .htaccess все еще включена, только с
уникальные настройки. Системные администраторы могут изменить имя файла .htaccess просто
как мы изменили имя файла по умолчанию, который ищет Apache. Это возможно
используя AccessFileName
директива в глобальном конфигурационном файле. Опять же, лучшее, что можно сделать в этом случае, это
свяжитесь с вашей хостинговой компанией для получения дополнительной информации.

Прежде чем я расскажу о некоторых интересных вещах, которые вы можете делать с файлами .htaccess, я должен
скажу вам, что вы получаете в. Как я уже упоминал ранее, вы позволяете
переопределение настроек сервера для каталога и всех его подкаталогов. Всегда
имейте в виду, что вы затрагиваете все подкаталоги, а также текущий
каталог.

Кроме того, при включении сервер будет иметь потенциальное снижение производительности. Причина в том, что при каждом запросе к серверу, если включена поддержка .htaccess, когда Apache отправляется для извлечения запрошенного файла для клиента, он должен искать файл .htaccess в каждом отдельном каталоге, ведущем к тому месту, где хранится файл.

Это означает несколько вещей. Во-первых, потому что Apache всегда ищет файлы .htaccess
при каждом запросе любые изменения в файле вступают в силу немедленно.
Apache не кеширует их и сразу же увидит ваши изменения при следующем запросе.
Однако это также означает, что Apache придется выполнять дополнительную работу для каждого запроса.
Например, если пользователь запрашивает /www/supercool/test/index.html, то ваш сервер
проверил бы следующие файлы .htaccess:

Эти потенциальные обращения к файлам (возможно, потому что файлы могут не существовать) и их
выполнение (если они существовали) займет время. Опять же, мой опыт показывает, что это
незаметно, и это не перевешивает преимущества и гибкость .htaccess
файлы предоставляют разработчикам.

Однако, если это вас касается, пока у вас есть доступ к файлу httpd.conf
тогда вы всегда можете поместить свои директивы туда. Установив AllowOverride на «Нет»
Apache не будет искать эти файлы .htaccess. Если вы действительно хотите, вы можете поставить
директивы, которые вы хотели добавить в свой файл /www/supercool/test/.htaccess
прямо в httpd.conf вот так:

Недостатком этого подхода является то, что вам придется перезапустить сервер Apache.
при каждом изменении, чтобы перезагрузить новую конфигурацию.

В конце концов, все сводится к личным предпочтениям или к тому, что позволяет ваш хост.
Я предпочитаю использовать файлы .htaccess, потому что у меня есть возможность разместить их там, где
Я хочу, и их эффекты живы сразу, не требуя перезагрузки сервера.

Прежде чем перейти к каким-либо из сложных функций, давайте начнем с чего-то
простой, но полезный, чтобы вы могли почувствовать работу с файлами .htaccess.
Списки каталогов настолько распространены, что вы, вероятно, сталкивались с их многочисленными
раз в Интернете.

Когда пользователь запрашивает каталог, Apache сначала ищет файл по умолчанию. Как правило, он будет называться «index.html» или «index.php» или что-то подобное. Когда это не
найти один из этих файлов, он возвращается к модулю mod_autoindex для
отобразить список файлов и папок в этом каталоге. Иногда это
включен, иногда отключен, а иногда вы хотите
сделать настройки. Ну, с .htaccess вы можете легко манипулировать этими списками!

По умолчанию списки каталогов включены. Вот пример сценария.
Предположим, у вас есть куча медиа-файлов, которые вы храните на своем веб-сервере,
и вы хотите скрыть их от общественности и поисковых систем, чтобы никто не мог
украсть эти файлы. Это очень легко сделать! Просто создайте файл .htaccess
в каталоге, который вы хотите скрыть, и добавьте следующую директиву:

Разбивая это, мы используем директиву Options .
Эта директива может принимать несколько значений (упомянутых ранее). Если вы предоставите значения
с + или — как я сделал с -Indexes, тогда это унаследует
Опции, которые были включены в более высоких каталогах и глобальной конфигурации!
Если вы не предоставите + или -, то список, который вы предоставляете, станет
единственные опции, включенные для этого каталога и его подкаталогов. Другие опции не будут включены. Поскольку вы можете не знать, какие параметры были включены ранее, вы, скорее всего,
используйте синтаксис + или -, если вы не уверены, что вам нужны только определенные параметры.

Теперь, с этой директивой в вашем файле .htaccess, когда вы указываете браузер на этот каталог
вы больше не сможете видеть файлы. Вот до и после:

Перед обычным списком каталогов
После запрещенного доступа

Хорошо, может быть, полное отключение индекса каталога не то, что вы хотите. Это более
скорее всего, вы хотите сохранить индексы, но разрешить доступ только определенным людям.
Именно здесь базовая аутентификация может быть очень полезна. Это самый распространенный
тип аутентификации в сети. Когда пользователь пытается получить доступ к странице, он
увидит знакомое имя пользователя / пароль. Только пользователь с правильным
учетные данные смогут получить доступ к содержимому.

Для базовой аутентификации есть только два шага.

  1. Установите файл, в котором хранятся имена пользователей и пароли (зашифрованные).
  2. Добавьте несколько строк в .htaccess, чтобы использовать этот файл.

Традиционно веб-разработчики назвали файл, в котором хранятся имена пользователей и
пароли «.htpasswd». Это потому, что инструмент командной строки, который поставляется с
Apache, который генерирует правильную зашифрованную пару имя пользователя / пароль на самом деле
называется htpasswd! Если вы чувствуете себя комфортно в командной строке, вы можете использовать htpasswd
инструмент, однако есть много онлайн-инструментов, которые будут генерировать результат так же легко.

Я создал образец файла .htpasswd для пользователя «joe» с паролем «cool».
Я бросил эти значения в связанный онлайн-инструмент, и он произвел:

Ваш вывод может быть другим, это нормально. Пароли хешируются
случайная соль, чтобы сделать их немного более уникальными и безопасными. После вашего имени пользователя
и комбинация пароля была добавлена ​​в файл .htpasswd, тогда вам следует
добавьте следующие строки в ваш файл:

Эти команды хорошо документированы. Единственная реальная проблема заключается в том, что вы
должны правильно установить путь к файлу .htpasswd, который вы только что
генерироваться. Это полный абсолютный путь от абсолютного корня
сервер. Кроме того, поскольку путь к файлу .htpasswd является абсолютным, это хорошо
Практика, чтобы положить его в каталог за пределами каталога, где Apache
служит веб-страниц для общественности. Таким образом, злоумышленники не смогут
чтобы легко получить доступ к необработанному списку пользователей / паролей, хранящихся в .htpasswd.

Когда все настроено, когда кто-то пытается получить доступ к странице, он
получить следующий диалог:

Диалог входа

Базовая аутентификация удобна и проста, но это не полное решение.
Пароли передаются по проводам, кодированный Base 64, в виде простого текста. если ты
хотите более безопасную аутентификацию, вы должны использовать базовую аутентификацию
с https , более
безопасный протокол. Это тема для другого времени.

Основным протоколом Интернета является протокол передачи гипертекста (HTTP) .
Если вы действительно хотите понять, что остальные директивы Apache
иметь дело, вы должны иметь некоторые знания о протоколе. я
только собираюсь су ппля очень краткое резюме тут. Я также приложу усилия
объяснить, что делают более сложные директивы, но это сделает
больше смысла, если вы понимаете заголовки HTTP .

Вкратце: HTTP не имеет состояния. С каждым запросом (из браузера)
и каждый ответ (от веб-сервера, как Apache) есть два раздела.
Раздел информации заголовка, затем необязательный раздел, содержащий сами данные,
если есть какие-либо данные.

Информация заголовка запроса часто указывает файл, которым они являются
запрашивая у сервера (index.html) любую информацию о состоянии, которую они должны предоставить
(например, данные cookie) и типы mime, которые он готов принять с сервера.
(текст / HTML или даже GZIP-кодированный контент).

Информация заголовка ответа часто указывает общую информацию о сервере (Apache, PHP,
Версии Perl и т. Д.), Кодировка содержимого, длина, mime / тип и т. Д. Там
множество заголовков HTTP, чтобы указать еще больше деталей, таких как Cache Control,
Перенаправления и коды состояния. Вы когда-нибудь получали 404? Это было результатом запроса
файл, который сервер не смог найти, и таким образом он отправил обратно 404
Код статуса в своем
Отклик.

Какое это имеет отношение к .htaccess? Ну, вы можете использовать директивы Apache для
перезаписать (установить) или добавить новые заголовки (добавить), которые отправляются обратно клиенту
в разделе заголовка ответа. Кроме того, как вы увидите в следующих уроках,
более продвинутая функциональность, такая как перезапись URL-адресов, работает с входящими заголовками.

Давайте начнем с простого, добавим заголовок в Response и посмотрим, что произойдет:

Запрос файла в том же каталоге, что и этот .htaccess файл показывает
дополнительный заголовок:

Пользовательский заголовок отображается в Safaris Web Inspector

Вы, наверное, подумали, что это было странно, что я добавил префикс
«ИКС-«. На самом деле это общее соглашение, которое разработчики используют для обозначения того, что
заголовок является нестандартным заголовком. Это позволяет легко понять, что этот заголовок является пользовательским. Это соглашение
кратко упоминается здесь .

На более комичной ноте, некоторые люди немного повеселились с заголовками.
Этот сайт
указывает на некоторые довольно необычные заголовки, найденные по всей сети.

Тем не менее, я действительно хочу показать вам, как создавать заголовки, чтобы вы могли
использовать их в качестве техники отладки. Буквально на днях я провел тест на
проверьте, были ли включены определенные модули на веб-сервере. Я написал
следующая проверка:

Когда я сделал следующий запрос в браузере и проверил заголовки ответа, он
показал, что ни один из модулей не был включен! Я связался с моей хостинговой компанией, и они согласились включить сжатие gzip!

Существует разница между набором заголовков и
Заголовок добавить. С добавлением заголовок всегда будет добавлен
к ответу. Даже если это произойдет несколько раз в ответе. Это чаще всего
что вы хотели бы для пользовательских заголовков. Вы бы использовали набор, когда вы хотите
переопределите значение одного из заголовков по умолчанию, которое возвращает Apache.
пример будет переопределять MIME / тип, указанный Content-Type
заголовок для определенного файла. Apache установит внутреннее значение, а затем
используйте это, когда он печатает заголовок по умолчанию. Здесь не будет
дубликаты, и, следовательно, нет возможности для интерпретации ошибки или путаницы
клиентом (Если вам интересно, спецификация HTTP гласит, что в
в случае дубликатов клиент всегда должен использовать последнее указанное значение
для этого дубликата заголовка.)

Я рассмотрел некоторые основные директивы Apache довольно подробно. Я хотел убрать фундаментальные детали, чтобы в следующем уроке могли обсуждаться более интересные вещи. Моя следующая статья будет
сосредоточиться на некоторых из более полезных функций, которые вы можете включить с помощью .htaccess.
Эти темы будут включать в себя:

  • GZip-кодирование контента для Apache 1.3 и Apache 2
  • Сквозное описание mod_rewrite и множество примеров
    которые анализируются и подробно объясняются.

И не забывайте, что если вы пытаетесь следовать этому, другой вариант — попробовать утилиту .htaccess Builder, доступную на Envato Market.