Перейти к содержимому

Как включить htaccess в apache 2

  • автор:

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

Редактируем его любым текстовым редактором, вот как оно должно выглядеть:

 ServerAdmin admin@site.com DocumentRoot /var/www Options Indexes FollowSymLinks MultiViews AllowOverride All # - это значение было None Order allow,deny allow from all  

Заставьте апач перечитать конфигурацию:

service apache2 reload 

Всё. Теперь ваш кастомный .htaccess работает в любой сабдиректории /var/www без проблем

Ключевым параметром в данном случае является AllowOverride All . Также можете найти и поправить секцию Directory в /etc/apache2/apache2.conf .

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

Впервые устанавливаю веб сервер и затормозился на этом этапе.

Прописываю в apache2.conf

 AllowOverride All 

Но это не срабатывает. В качестве директории вписывал рут ( <Directory /> ), но даже так не работает. Что я делаю не так?

На всякий случай, ОС — Debian (Raspbian).

  • Вопрос задан более трёх лет назад
  • 37031 просмотр

2 комментария

Оценить 2 комментария

Включить .htaccess на Linux-сервере Apache 2

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

В этом руководстве мы увидим, как включить .htacces в Apache 2 для системы Linux. Вы также узнаете, как отключить его на случай, если вы решите отключить эту настройку позже.

В этом уроке вы узнаете:

  • Для чего используется файл .htaccess ?
  • Как включить .htaccess в Apache

Включите .htaccess на Linux-сервере Apache 2, пошаговые инструкции

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

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

    Начните с открытия файла виртуальных хостов Apache. Мы просто отредактируем файл по умолчанию, который называется 000-default.conf , но ваш может иметь другое имя. Для этого шага используйте nano или предпочитаемый вами текстовый редактор.

$ sudo nano /etc/apache2/sites-enabled/000-default.conf
 AllowOverride All 
$ sudo apachectl configtest Syntax OK $ sudo systemctl restart apache2
$ sudo nano /var/www/html/.htaccess
Redirect permanent / https://example.com
 AllowOverride none 

Устранение неполадок с файлом .htaccess

Если ваши правила не работают должным образом, вот что вы можете попробовать.

    Убедитесь, что файл .htaccess имеет соответствующие разрешения.

$ sudo chown www-data.www-data /var/www/html/.htaccess
$ sudo a2enmod alias

Заключительные мысли

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

Все права защищены. © Linux-Console.net • 2019-2023

Файл .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. По умолчанию в главном конфигурационном файле следующее:

/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted 

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

AllowOverride FileInfo AuthConfig Limit

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

/htdocs"> Options Indexes FollowSymLinks AllowOverride All Require all granted 

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

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

 Require all denied 

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

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

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

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

AccessFileName ".config"

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

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

Context: server config, virtual host, directory, .htaccess Override: FileInfo

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

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

Синтаксис .htaccess

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

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

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

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

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

Options +ExecCGI

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

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

Options Includes

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

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

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

 AllowOverride All Options +IncludesNoExec -ExecCGI 

Этот пример подразумевает, что вашим 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 был включён для /, что встречается не очень часто).

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

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

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

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

AddType text/example ".exm"

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

 AddType text/example ".exm" 

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

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

AllowOverride None

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

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

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

AllowOverride None

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

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

[Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here

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

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

[Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *