Как включить закомментированные директивы php в файле htaccess

Обновлено: 04.07.2024

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

Файлы .htaccess невидимы

Есть веская причина, по которой вы не увидите файлы .htaccess в Интернете; почти каждый веб-сервер в мире настроен на их игнорирование по умолчанию. То же самое касается большинства операционных систем. В основном это точка "." в начале, понимаете?

Если вы не видите, вам необходимо отключить в вашей операционной системе функции невидимых файлов или использовать текстовый редактор, позволяющий открывать скрытые файлы, например bbedit на платформе Mac. . В окнах отображение невидимых элементов в проводнике должно позволять любому текстовому редактору открывать их, а большинство приличных редакторов также сохранять их ** . Вероятно, большинство пользователей Linux знают, как их найти без моей помощи.

На изображении операционной системе было приказано отображать невидимые файлы. некрасиво, но иногда необходимо. Вы также должны указать своему ftp-клиенту сделать то же самое.

Кстати; этой папки больше нет. Но люди все еще находят его с помощью моего умного скрипта 404.

** даже блокнот может сохранять файлы, начинающиеся с точки, если вы заключаете имя в двойные кавычки при сохранении; то есть ".htaccess". Вы также можете использовать свой ftp-клиент для переименования файлов, начинающихся с точки, даже в вашей локальной файловой системе; отлично работает в FileZilla.

Что такое файлы .htaccess?

Проще говоря, это невидимые текстовые файлы, в которых можно хранить директивы сервера. Директивы сервера — это все, что вы можете поместить в файл конфигурации Apache ( httpd.conf ) или даже в php.ini ** , но в отличие от этих «главных» файлов директив, эти директивы .htaccess применяются только к папке, в которой находится файл .htaccess. проживает, и все папки внутри.

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

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

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

Комментирование кода .htaccess – важная часть организации. Вот несколько простых советов и рекомендаций по написанию комментариев в файле .htaccess (или в файле конфигурации сервера Apache).

Знак фунта

Добавить перед строкой директив .htaccess знак решетки — это быстрый способ отключить всю строку, что очень полезно при устранении неполадок и настройке кода.

Вся строка

В новых версиях Apache для написания комментария требуется вся строка. То есть, когда вы добавляете знак решетки, чтобы сделать комментарий, он должен быть первым непустым символом в строке. Если вы добавите непустые символы перед знаком решетки, поздоровайтесь с одной из этих неприятных ошибок сервера уровня 500.

Например, любой из этих комментариев является законным:

Но эти примеры недействительны и приведут к ошибке:

По сути, если вы хотите включить комментарий, лучше всего поставить знак решетки в начале строки, чтобы Apache знал, что его нужно игнорировать.

Та же строка

Я помню, что в более ранних/старых версиях Apache можно было включать комментарий в конце строки (заключенный в двойные кавычки), например:

Этот метод был чрезвычайно полезным и замечательным, но, к сожалению, он больше не разрешен в новых версиях Apache. Поэтому, как бы это ни помогало организовать ваш код, не делайте этого. Храните свои комментарии каждый в отдельной строке, как обсуждалось ранее. Я упоминаю об этом здесь, потому что на Interwebz все еще есть примеры, использующие такой синтаксис.

В любом месте файла

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

Поддерживайте чистоту

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

Не сходи с ума

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

Если вы дочитали до этого места, поздравляем! Вы такой же фанат .htaccess :)

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

Существует несколько директив Apache, позволяющих изменять конфигурацию PHP из файлов конфигурации Apache. Список директив PHP_INI_ALL, PHP_INI_PERDIR или PHP_INI_SYSTEM см. в приложении Список директив php.ini.

значение имени php_value

Устанавливает значение указанной директивы. Может использоваться только с директивами типов PHP_INI_ALL и PHP_INI_PERDIR. Чтобы очистить ранее установленное значение, используйте none в качестве значения.

Примечание. Не используйте php_value для установки логических значений. Вместо этого следует использовать php_flag (см. ниже).

Используется для установки логической директивы конфигурации. Может использоваться только с директивами типов PHP_INI_ALL и PHP_INI_PERDIR.

значение имени php_admin_value

Устанавливает значение указанной директивы. Это нельзя использовать в файлах .htaccess. Любой тип директивы, установленный с помощью php_admin_value, не может быть переопределен с помощью .htaccess или ini_set(). Чтобы очистить ранее установленное значение, используйте none в качестве значения.

имя php_admin_flag включено|выключено

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

Изменение конфигурации PHP через реестр Windows

При запуске PHP в Windows значения конфигурации можно изменить для каждого каталога с помощью реестра Windows. Значения конфигурации хранятся в разделе реестра HKLM\SOFTWARE\PHP\Per Directory Values ​​в подразделах, соответствующих путям. Например, значения конфигурации для каталога c:\inetpub\wwwroot будут храниться в ключе HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot . Настройки для каталога будут активны для любого скрипта, работающего из этого каталога или любого его подкаталога. Значения под ключом должны иметь имя директивы конфигурации PHP и строковое значение. Константы PHP в значениях не анализируются. Однако только значения конфигурации, изменяемые в PHP_INI_USER, могут быть установлены таким образом, значения PHP_INI_PERDIR не могут быть установлены, поскольку эти значения конфигурации повторно считываются для каждого запроса.

Другие интерфейсы для PHP

Независимо от того, как вы запускаете PHP, вы можете изменить определенные значения во время выполнения ваших скриптов с помощью ini_set() . Дополнительную информацию см. в документации на странице ini_set().

Если вас интересует полный список параметров конфигурации вашей системы с их текущими значениями, вы можете выполнить функцию phpinfo() и просмотреть результирующую страницу. Вы также можете получить доступ к значениям отдельных директив конфигурации во время выполнения, используя ini_get() или get_cfg_var() .

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

  • Файлы .htaccess
  • Что это такое/как их использовать
  • Когда (не) использовать файлы .htaccess
  • Как применяются директивы
  • Пример аутентификации
  • Пример включения на стороне сервера
  • Переписать правила в файлах .htaccess
  • Пример компьютерной графики
  • Устранение неполадок

См. также

файлы .htaccess

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

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

Если вы хотите назвать свой файл .htaccess как-то иначе, вы можете изменить имя файла с помощью директивы AccessFileName. Например, если вы предпочитаете называть файл .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, можно с таким же успехом выполнить в разделе основного файла конфигурации сервера.

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

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

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

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

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

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

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

Содержимое .htaccess в /www/htdocs/example

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример включения на стороне сервера

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

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

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

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

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

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

Дополнительные сведения об использовании mod_rewrite см. в документации по mod_rewrite .

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

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

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

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

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

Устранение неполадок

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

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

[Пятница, 17 сентября, 18:43:16 2010] [предупреждение] [клиент 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex здесь запрещен

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

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

[Сб, 09 августа, 16:22:34 2008] [предупреждение] [клиент 192.168.200.51] /var/www/html/.htaccess: RewriteCond: неверные разделители флагов

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

Комментарии

Авторское право 2022 г. The Apache Software Foundation.
Под лицензией Apache License, версия 2.0.

Читайте также: