Apache. Документация на русском


Разделы:   1    2    3    4    5      6      7    8    9    10    11    12    13    14    15    16  

Раздел 6. Руководства, учебные пособия и инструкции

Пункты:   49    50    51    52      53      54    55    56  

 <         > 
  RU            EN  

Пункт 53. Файлы .htaccess

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

файлы .htaccess

Вам следует полностью избегать использования .htaccess файлов, если у вас есть доступ к файлу конфигурации основного сервера httpd. Использование .htaccess файлов замедляет работу вашего http-сервера Apache. Любую директиву, которую вы можете включить в .htaccess файл, лучше установить в Directory блоке, так как она будет иметь тот же эффект, но с большей производительностью.

Что это такое / Как их использовать

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

Примечание:

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

 ИмяФайлаДоступа ".config" 

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

Например, если вы посмотрите документацию по директиве AddDefaultCharset , вы обнаружите, что она разрешена в .htaccess файлах. (См. строку Context в сводке директив.) Строка Override читается как FileInfo . Таким образом, вы должны иметь по крайней мере AllowOverride FileInfo , чтобы эта директива соблюдалась в .htaccess файлах.

Пример:

Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределить: Информация о файле

Если вы не уверены, разрешена ли конкретная директива в файле .htaccess , просмотрите документацию по этой директиве и проверьте строку Context на наличие «.htaccess».

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

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

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

Однако в целом .htaccess следует по возможности избегать использования файлов. Любую конфигурацию, которую вы хотели бы поместить в .htaccess файл, можно с таким же успехом выполнить в <Directory> разделе вашего основного файла конфигурации сервера.

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

Первым из них является производительность. Когда AllowOverride разрешено использование .htaccess файлов, httpd будет искать файлы в каждом каталоге .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 . Обратитесь к Руководству по перезаписи для получения более подробной информации по этому вопросу.

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

Обратите внимание, что это полностью эквивалентно размещению .htaccess файла в каталоге /www/htdocs/example , содержащем директиву, и размещению этой же директивы в разделе каталога <Directory "/www/htdocs/example"> в конфигурации вашего основного сервера:

.htaccess файл в /www/htdocs/example :

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

 AddType текст/пример ".exm" 

Раздел из вашего apache2.conf файла

 <Каталог "/www/htdocs/example">
 AddType текст/пример ".exm"
</Каталог> 

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

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

 Аллововеррайд 

Как применяются директивы

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

Пример:

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

 Опции +ExecCGI 

AllowOverride Options (Примечание: чтобы разрешить использование директивы " Options " в файлах , у вас должна быть активна " " .htaccess .)

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

 Опции Включает 

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

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

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

 <Каталог "/www/htdocs">
 Разрешить переопределить все
</Каталог>
<Расположение "/">
 Опции +IncludesNoExec -ExecCGI
</местоположение> 
В этом примере предполагается, что DocumentRoot ваш /www/htdocs .

Пример аутентификации

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

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

.htaccess содержимое файла:

 Основной тип авторизации
AuthName "Требуется пароль"
AuthUserFile "/www/passwords/password.file"
AuthGroupFile "/www/passwords/group.file"
Требуются администраторы группы 

Обратите внимание, что они AllowOverride AuthConfig должны действовать, чтобы эти директивы имели какой-либо эффект.

См. руководство по аутентификации для более полного обсуждения аутентификации и авторизации.

Серверная часть включает пример

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

 Опции +Включает
AddType текст/html shtml
shtml, обработанный сервером AddHandler 

Обратите внимание, что AllowOverride Options и AllowOverride FileInfo оба должны быть в силе, чтобы эти директивы имели какой-либо эффект.

См. учебник SSI для более полного обсуждения включений на стороне сервера.

Переписать правила в файлах .htaccess

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

 # В apache2.conf
Правило перезаписи "^/images/(.+)\.jpg" "/images/$1.png"
# В .htaccess в корневом каталоге
RewriteRule "^images/(.+)\.jpg" "images/$1.png"
# В .htaccess в картинках/
Правило перезаписи "^(.+)\.jpg" "$1.png" 

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

Обратитесь к документации mod_rewrite для получения дополнительной информации об использовании mod_rewrite .

Пример компьютерной графики

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

 Опции +ExecCGI
AddHandler cgi-скрипт cgi pl 

В качестве альтернативы, если вы хотите, чтобы все файлы в данном каталоге считались программами CGI, это можно сделать со следующей конфигурацией:

 Опции +ExecCGI
cgi-скрипт SetHandler 

Обратите внимание, что AllowOverride Options и AllowOverride FileInfo оба должны быть в силе, чтобы эти директивы имели какой-либо эффект.

См. руководство по CGI для более полного обсуждения программирования и настройки CGI.

Поиск неисправностей

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

Чаще всего проблема заключается в том, что AllowOverride не установлено так, что ваши директивы конфигурации соблюдаются. Убедитесь, что у вас нет AllowOverride None действия для рассматриваемой области файла. Хороший тест для этого — поместить мусор в свой .htaccess файл и перезагрузить страницу. Если ошибка сервера не генерируется, то у вас почти наверняка AllowOverride None в действии.

Если, с другой стороны, вы получаете ошибки сервера при попытке доступа к документам, проверьте журнал ошибок 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

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



 <         > 

Пункты:   49    50    51    52      53      54    55    56  

Рейтинг@Mail.ru