Htaccess для apache windows

Файл .htaccess в Apache

Файлы .htaccess размещаются в папках сайтов веб-сервера Apache. Они позволяют изменять настройки веб-сервера на уровне конкретных папок.

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

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

Если имеются неправильные настройки в главном конфигурационном файле Apache, то веб-сервер не запустится. Но «с помощью» .htaccess можно сделать так, что неправильные настройки будут подгружены при обращении к файлам папки — в этом случае веб-сервер продолжит работу, но для этого запроса будет выдана ошибка 500 — Сервер пока не может обработать этот запрос.

Как включить .htaccess

Включение поддержки файла .htaccess сказывается на производительность сервера даже в том случае, если фактически этот файл не используется (объяснение ниже). Поэтому по умолчанию файл .htaccess отключён в Apache.

Включить .htaccess можно индивидуально для каждой директивы Directory. Для этого внутри неё нужно указать нужную настройку с помощью директивы AllowOverride. По умолчанию в главном конфигурационном файле следующее:

Как видно, AllowOverride установлен на None. Вместо None можно указать All или любые комбинации ключевых слов, например:

Для включения всех возможностей .htaccess установите так:

Чтобы настройки вступили в силу, перезапустите веб-сервер.

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

По умолчанию эта настройка уже имеется в главном конфигурационном файле Apache.

Как поменять имя файла .htaccess

Для дополнительной безопасности, либо для своего удобства, можно поменять имя файла .htaccess. Точнее говоря, точно также как и файлы .htaccess будут обрабатываться файлы с указанным произвольным именем.

Для этого используется директива AccessFileName, которая позволяет поменять имя файла .htaccess на другое. Допустим мы решили назвать файл именем .config, тогда в конфигурационный файл сервера нужно добавить следующее:

Какие настройки можно использовать в .htaccess

В файле .htaccess можно использовать многие (но не все) настройки, которые можно прописать в конфигурационном файле сервера. Чтобы точно узнать про конкретную директиву, можно её использовать в .htaccess или нет, нужно открыть документацию https://httpd.apache.org/docs/current/, найти интересующую директиву и посмотрите, указан ли в строке Context файл .htaccess. Если указан, значит можно использовать.

Очень часто файл .htaccess используется для настройки доступа или для установки правил RewriteRule (mod_rewrite), но в этом файле можно использовать и другие настройки.

Читайте также:  Pvs studio ��� linux

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

Синтаксис .htaccess

У .htaccess нет особенных настроек синтаксиса — директивы записываются также, как и в конфигурационных файлах.

Если вы получили ошибку 5xx — Ошибка сервера, это означает, что имеется ошибка в синтаксисе .htaccess.

Как применяются директивы файла .htaccess

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

В директории /www/htdocs/example1 у нас есть файл .htaccess содержащий следующее:

Примечание: у вас должна быть включена опция «AllowOverride Options» чтобы разрешить использовать директиву «Options» в .htaccess файлах. Либо значение AllowOverride должно быть установлено на All.

В директории /www/htdocs/example1/example2 у нас есть файл .htaccess содержащий:

Поскольку второй файл .htaccess в директории /www/htdocs/example1/example2, то выполнение CGI не разрешено, поскольку эффект будет иметь опция Options Includes, которая полностью перезаписывает значения настроек Options, имеющих место ранее.

Объединение файла .htaccess с главными конфигурационными файлами

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

Этот пример подразумевает, что вашим DocumentRoot является /www/htdocs.

Когда (не) использовать файлы .htaccess

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

Файлы .htaccess должны использоваться в случае, когда веб-мастеру нужно применить изменённые настройки к серверу на уровне директорий, но у него нет root доступа к системе сервера. Это обычный случай для виртуальных хостингов, то есть на практике очень часто файлы .htaccess являются единственной возможной альтернативой.

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

Имеется две главные причины избежания использования файлов .htaccess.

Первая причина — это производительность. Когда AllowOverride установлена на разрешение использования файлов .htaccess, httpd будет искать файлы .htaccess в каждой папке. То есть разрешение файлов .htaccess ударяет по производительности не зависимо от того, используете вы на самом деле .htaccess или нет, создали вы хоть один файл .htaccess или нет. Файл .htaccess загружается каждый раз, когда запрашивается документ.

Более того, помните, что httpd должен искать файлы .htaccess в директориях более высокого уровня чтобы собрать полный набор директив, которые должны быть применены. Таким образом, если файл запрошен из директории /www/htdocs/example, то httpd должен искать эти файлы в:

  • /.htaccess
  • /www/.htaccess
  • /www/htdocs/.htaccess
  • /www/htdocs/example/.htaccess

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

Читайте также:  Delete windows 10 spying

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

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

Помещение файла .htaccess с управляющими директивами в папку /www/htdocs/example эквивалентно помещению этих же директив в раздел Directory: в главных настройках конфигурации сервера:

Содержимое файла .htaccess в /www/htdocs/example

Секция из файла httpd.conf:

При этом размещение этой конфигурации в файле настроек сервера приведёт в результате к меньшему влиянию на производительность, поскольку конфигурация загружается только один раз при запуске httpd, а не при каждом запросе к файлу.

Можно полностью отключить использование файлов .htaccess установив директиву AllowOverride на none:

Решение проблем

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

Чаще всего проблема в том, что AllowOverride не установлена так, чтобы учитывались ваши конфигурационные директивы. Убедитесь, что у вас не включено

Следующий тест позволит однозначно ответить на вопрос, включена ли поддержка файлов .htaccess или нет: поместите какой-нибудь мусор в файл .htaccess и перезагрузите страницу. Если не появиться ошибка сервера, то практически наверняка включено AllowOverride None.

С другой стороны, если вы получаете ошибки сервера при попытке доступа к документам, проверьте лог error (ошибок) httpd. Весьма вероятно, что он скажет вам, что эта используемая в файле .htaccess директива не разрешена:

Это говорит о том, что либо вы используете директиву, которая не разрешена в файлах .htaccess, или что у вас просто нет установленной AllowOverride на уровень, достаточном для используемой директивы.

Ещё один вариант, в журнале может быть сказано, что у вас ошибка синтаксиса в самой используемой директиве:

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

Создание и настройка .htaccess

Общие сведения

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

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

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

Создание и редактирование .htaccess

Создать файл настроек .htaccess вы можете при помощи файлового менеджера панели управления аккаунтом.

1. Перейдите в раздел «Файловый менеджер» панели управления.

2. Выберите пункт меню «Файл» — «Новый файл».

3. Выберите из списка расширений .htaccess.

4. Нажмите кнопку «Создать файл».

Возникновение ошибки «Имя уже используется» означает, что данный файл уже создан в текущей директории.

Для редактирования файла в файловом менеджере перейдите в директорию с данным файлом, выделите его кликом левой кнопки мыши и выберите пункт меню «Файл» — «Редактировать».

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

Читайте также:  Как убрать зарезервированную оперативную память windows 10 64 bit

Вы также можете редактировать .htaccess во внешних редакторах, но обратите внимание, что текстовые редакторы Windows (например, «Блокнот») при сохранении любых документов с кодировкой UTF-8 добавляют в них метки порядков байтов юникода — BOM-сигнатуры. Файлы с такой сигнатурой некорректно обрабатываются веб-сервером, поэтому мы рекомендуем редактировать .htaccess напрямую в «Файловом менеджере» или через специальный редактор «Notepad++».

Примеры настроек

Перенаправления

Настройка редиректов описана в отдельной статье: Типовые перенаправления.

Параметры PHP

Настройка опций PHP через .htaccess описана в отдельной статье: Настройка параметров PHP.

Управление доступом к сайту

Разрешить или ограничить доступ к сайту для определенных IPv4-адресов можно с помощью директив Order Allow,Deny или Require . В новых версиях Apache, начиная с 2.4, которая используется на наших хостинговых серверах, рекомендуется использовать именно Require.

Обратите внимание, что в рамках нашей архитектуры директивы запрета доступа не будут работать для IPv6. Для запрета доступа с IPv6-адресов необходимо удалить АААА-запись домена.

Разрешить доступ конкретным IP (для остальных доступ запрещен):

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

Запретить доступ конкретным IP (для остальных доступ разрешен). Для работы запрещающих директивы, их необходимо заключать в блоки :

При использовании Allow,Deny:

Разрешить доступ всем, кроме конкретного IP:

Запретить доступ всем, кроме конкретного IP:

Запретить доступ для всех:

Аналогичным образом можно настроить доступ к конкретным файлам, включив эти директивы в блоки , например:

Защита сайта или директории паролем. Базовая аутентификация

Если требуется защитить сайт или конкретную папку сайта паролем, можно воспользоваться базовой аутентификацией, которая работает на уровне веб-сервера Apache и настраивается также с помощью файла .htaccess.

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

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

Перейдите в директорию, которую необходимо защитить паролем (например, это может быть директория wp-admin), и создайте в ней файл .htaccess со следующим содержимым, указав вместо u и user первую букву вашего логина и сам логин:

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

Блокировка запросов по User-Agent

Можно ограничить доступ к сайту для определенных User-Agent. Например, при нежелательной активности ботов MJ12bot и SolomonoBot, используйте:

Ограничения по видам запросов

Для применения ограничений для определенных методов запросов можно использовать блоки
:

Для новых версий Apache, начиная с 2.4, оптимально использовать директивы Require и заключать их в блоки :

Индексная страница по умолчанию

Директива DirectoryIndex позволит вам указать страницу, которая будет отдаваться по умолчанию при обращении к директории, например:

Вы также можете указать несколько страниц, в этом случае сервер «пройдет» по списку слева направо и отобразит первую доступную страницу:

Собственные страницы ошибок

С помощью директивы ErrorDocument вы можете сообщить веб-серверу, какая страница должна отдаваться клиенту в случае возникновения определенной ошибки (403, 404, 500 и др.). Для этого необходимо указать номер ошибки и адрес нужной страницы:

Вы можете хранить файлы этих страниц как в корне сайта, так и в специально созданной папке, например, errors.

Кодировка

Указать кодировку по умолчанию (например, cp1251, utf-8, koi8-r) для всех выдаваемых страниц можно с помощью AddDefaultCharset, например:

При использовании PHP версии 5.6 и выше может потребоваться дополнительно указать:

Отображение листинга (содержимого директории)

Если индексный файл запрашиваемой клиентом директории недоступен, будет выведена ошибка «403 Forbidden». Если вместо этого необходимо отображение содержимого директории, потребуется добавить в .htaccess директиву:

Оцените статью