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

Дата: 2009-05-18

Наверняка при загрузке различных скриптов или просто на сервере Вам доводилось встречать такой файл .htaccess . Обратите внимание что наличие точки впереди - является обязательным!!! Если Вы не видите этот файл, но знаете что он должен быть, то скорее всего в настойках Вашей Винды не показываются скрытые файлы. Исправить это легко заходим в меню Сервис/Свойства папки/Вид/Скрытые файлы и папки . Здесь устанавливаем переключатель в положение Показывать скрытые файлы и папки. Жмем Применить, ОК . Или же посмотрите каким-то файловым менеджером, например я пользуюсь Total Commander и Вам рекомендую.

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

Давайте разберемся с назначением и использованием .htaccess

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

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

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

Пример простейшего использования возможностей конфигурирования Apache через файл.htaccess: Мы хотим "объяснить" веб-серверу что все html-документы, которые размещены на сервере, нужно "отдавать" клиенту в кодировке koi8-r, а не в windows-1251, как это сервер делает по умолчанию. Поместим в.htaccess строку:

AddType "text/html; charset=koi8-r" .html .htm .shtml

Получив такой.htaccess, веб-сервер Apache станет выдавать клиентскому браузеру заголовок, в котором будет указано, что документ имеет кодировку koi8-r.

Рассмотрим другие примеры использования файла.htaccess:

Переопределение индексного файла

Ситуация: пользователь обратился к каталогу http://www.vash_domen.ru/katalog/. При таком запросе первым откроется и будет показан индексный файл index.html . Если вы хотите переопределить индексный файл и сделать так, чтобы первым открывался не index.html , а например файл prais.php . Сделать это можно поместив в файл .htaccess в соответствующем каталоге следующую инструкцию:

DirectoryIndex prais.php

Получив .htaccess с таким содержимым, веб-сервер Apache откроет по умолчанию именно файл prais.php .

Запрет доступа к некоторым файлам

Иногда возникает необходимость запретить доступ к определенным файлам. Например, к конфигурационным файлам, содержащим реквизиты доступа к базам данных, интерфейсам и т.п. Допустим, в файле config.cfg вы храните логин/пароль доступа к базе данных. Создаем в этой директории файл .htaccess с директивами:

Order allow,deny Deny from all

Теперь, если посетитель наберет в браузере нечто вида http://vash_domen/config.cfg, он получит ошибку ошибку 403 или вашу страницу для этой ошибки. Подробнее о страницах ошибок можно почитать

Как закрыть директорию паролем

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

Создаем в каталоге, к которому хотим ограничить доступ по паролю, файл .htaccess с такими директивами:

AuthType Basic AuthName "Some Name" AuthUserFile /public_html/XX/YY/.htpasswd require valid-user

Путь /public_html/XX/YY/.htpasswd обозначает полный путь к файлу паролей на диске сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /public_html/XX/YY/.htpasswd.

В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере используя текстовый редактор, обратите особое внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме .

Создаем файл паролей .htpasswd . Файл с паролями должен содержать строки вида login:password . Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл - воспользоваться программой, входящей в поставку Apache - htpasswd (обычно на сервере она находится в каталоге /usr/local/bin/, полный путь - /usr/local/bin/htpasswd). Использхование этой программы на каждом сервере индивидуально - уточняйте у своего хостера.

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

Заголовок last-modified

Иногда требуется, чтобы web-сервер выдавал HTTP-заголовок Last-Modified . К примеру, при регистрации вашего ресурса на Яндексе, возникает ошибка "Неправильные даты".

Для статических документов, согласно документации по Apache:

cервер будет выдавать значение last-modified в том случае, если прописана директива "XBitHack full" (просто пропишите эту строку в .htaccess ), и для файла, к которому происходит обращение, выставлен атрибут "исполняемый" для группы.

Это действительно для html-файлов. В скриптах last-modified выдается иными средствами. Например, если учесть то, что php-скрипт генерирует код динамически, то самым логичным будет в качестве last-modified отдавать текущую дату и время. Реализуется это следующим образом - в файле .htaccess прописываем следующую строчку:

("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

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


Начнем издалека, чтобы и новичкам был понятен принцип работы описываемого в статье файла. Для функционирования сайта в Интернете нужен не только компьютер и выход к сети, но и установленное на него специальное ПО, которое обеспечивает доступ к данным по протоколам http и https. Таким программным обеспечением и является веб-сервер. Существуют различные типы веб-серверов, но самый распространенный — Apache. Он построен на открытом коде, предоставляется бесплатно, постоянно дорабатывается и улучшается, совместим с многими скриптами и работает почти на всех платформах, включая Windows, Linux, Netware 5.x.

Настраивается Apache через конфигурационные файлы, которые хранятся в текстовом формате. С их помощью можно задать определенные правила действия веб-сервера. Главный конфигурационный файл называется httpd.conf или apache.conf (в зависимости от дистрибутива ОС). Во многих случаях все конфигурации сервера можно указывать именно здесь, и в основном такой способ предпочтительней, потому что:

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

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

Что такое.htaccess и для чего он нужен

Файл (или файлы) .htaccess будет задавать правила работы веб-сервера только в каталоге, где он размещен, и его дочерних каталогах, без глобальных изменений работы всего сервера. Возможность использовать.htaccess прописывается директивой (т.е. командой) — AllowOverride — в главном конфигурационном файле httpd.conf, название которой прямо говорит о том, что настройки внутри.htaccess приоритетны перед настройками в httpd.conf (если иное не ограничено все той же директивой AllowOverride). С помощью этой директивы можно позволить все, а можно — только некоторые действия. Детальную инструкцию по его применению можно найти на сайте Apache.

С ней, при каждом обращении к веб-серверу, Apache будет просматривать все каталоги на наличие.htaccess. Изменения в файле действительны сразу после сохранения — перезагрузка всего веб-сервера не нужна (в отличие от изменений в httpd.conf).

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

AccessFileName .config

Как создать файл.htaccess

Как уже говорилось, конфигурационные файлы имеют текстовый формат, и создать.htaccess также можно с помощью текстового редактора (например, Блокнота или NotePad++ в Windows).

Имя файла — .htaccess (с точкой в начале);

тип — “Все файлы”;

формат переноса по словам;

режим ASCII (при загрузке.htaccess на хостинг по FTP-протоколу).

Apache — регистрозависимый веб-сервер, поэтому важно написать название маленькими буквами: .HTaccess и.htaccess — это разные файлы.

В Mac ОS файлы, начинающиеся с точки, невидимы. Поэтому Вы можете назвать его иначе и после, переместив по FTP на хостинг, переименовать. Обычно размещают файл в корневой директории веб-сервера (/public_html ) либо в корневой директории сайта (/public_html/site.com/ ).

Синтаксис.htaccess

Синтаксис.htaccess аналогичен синтаксису httpd. Для каждой директивы предполагается отдельная строка. Для своего же удобства, Вы можете вносить в файл комментарии с помощью знака #, и значение после # будет игнорироваться веб-сервером. Этот трюк можно использовать для отключения любой директивы. Ее не нужно удалять полностью из файла — достаточно просто закомментировать.

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

Возможности.htaccess

Контроль доступа

Запрет веб-доступа:

Order Deny,Allow Deny from all

Запрет веб-доступа, кроме IP:

Order deny,allow deny from all allow from xxx.xxx.xxx.xxx

Запрет веб-доступа для IP:

Order allow,deny Allow from all Deny from xxx.xxx.xxx.xxx

Запрет доступа к файлу:

Order allow,deny Deny from all

Защита директории с помощью пароля:

AuthType Basic AuthName "Directory Name" AuthUserFile /home/cpanel_user/.htpasswds/public_html/smth/passwd require valid-user # где AuthName "Directory Name - имя защищенной директории, а # /home/cpanel_user/.htpasswds/public_html/smth/passwd - местонахождение файла с паролем.

Работа с ошибками веб-сервера

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

ErrorDocument 404 http://yourdomain.com/error/404.html # где http://yourdomain.com/error/404.html - путь к созданной странице.

P.S. Пользователи услуги от сайт могут воспользоваться для создания своей страницы функционалом контрольной панели cPanel (в разделе “Расширенный ” пункт “Страницы ошибок ”).

Настройка 301 редиректа в htaccess

Для создания постоянного перенаправления используется директива 301 редиректа, которая передает весь вес страницы на новый url (поэтому оно предпочтительней, чем 302 редирект — в целях SEO).

Перенаправление всего сайта на новый домен:

Redirect 301 / http://www.newdomain.com/

Перенаправление страницы на новую:

Redirect 301 /page1.html http://mydomain.com/page2.html

Модуль перенаправления mod rewrite

Незаменимым механизмом для изменения URL-ссылок “на лету” является модуль mod_rewrite . Его полезность, а вместе с тем, сложность заключается в том, что можно использовать несметное количество правил, включающих еще больше переменных.

Для работы модуля, прежде всего нужны директивы

RewriteEngine On (включает работу механизма преобразования)

Options FollowSymLinks (условие для работы mod_rewrite).

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

RewriteRule

Одной из самых функциональных директив модуля mod_rewrite является RewriteRule . Для того, чтобы указать условие, при котором будет работать правило, используется директива RewriteCond . Она (одна или несколько) обязательно прописывается перед RewriteRule.

Перенаправление страницы на новый домен:

RewriteRule ^page1\.html$ http://newdomain.com/

Перенаправление сайта с домена без www на домен с www:

RewriteEngine On RewriteCond %{HTTP_HOST} !^www\..* RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1

И наоборот:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1

Перенаправление по протоколу HTTPS (предварительно нужно установить ):

RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Эти строки необходимо разместить в самом верху.htaccess.

Определение кодировки

Таблицу символов, в которой следует открыть сайт, определяет браузер. Однако, можно задать кодировку по умолчанию:

AddDefaultCharset UTF-8

Такое изменение распространяется в пределах действия.htaccess и на все страницы сайта. Можно задать кодировку для определенного типа файла, например windows-1251 для html:

AddType "application/x-httpd-php3; charset=windows-1251" .html

Часто сама страница несет в себе (а именно в заголовке) информацию об используемой кодировке. Нужно проверить, чтобы указанная кодировка в документе и в конфигурационном файле совпадали. Приведенная здесь utf-8 практически всегда требуется при работе популярных cms, так как они рассчитаны на большой круг пользователей по всему миру. Кстати, по умолчанию эта же кодировка настроена и на наших серверах виртуального хостинга.

Другие возможности

— Определить индексный файл сайта:

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

DirectoryIndex index.php

— Полезной директивой является FilesMatch, которая оговаривает пределы действия правила по названию файла, используя регулярные выражения. С ее помощью, например, можно запретить доступ к определенным файлам:

Order Allow,Deny Deny from all

Есть некоторые директивы, которые не поддерживаются на наших серверах с виртуальным хостингом, но вы можете их разрешить на своем ВПС, например.

Причина в том, что работающий как suPHP веб-сервер не поддерживает php_flag и php_value . Поэтому, мы предлагаем использовать сPanel (крайне полезен подраздел “Выбор версии РНР ”, для работы с error_log — “Журнал ошибок ”) или создать локальный файл php.ini для этой цели. Пару директив мы все-таки привели ниже:

— Для того, чтобы избежать зависания веб-сервера при обработке некорректно написанных скриптов, существует max_execution_time . С ее помощью указывается время в секундах, отведенное на обработку РНР-скрипта. Можно увеличить время ожидания веб-сервера при выполнении скрипта:

Php_value max_execution_time 60

— Определить максимальный размер загружаемого файла:

Php_value upload_max_filesize 128M (здесь вместо 128 поставьте нужное значение).

— Вывести ошибки РНР в отдельный файл:

Php_flag log_errors on php_value error_log /home/path/to/public_html/domain/PHP_errors.log # PHP_errors.log - название файла, а # /home/path/to/public_html/domain - путь к нему).

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

Если.htaccess не работает

Проверить работу файла можно, прописав несложные директивы, которые при правильном синтаксисе и верных настройках httpd (как описывалось в начале статьи) должны сработать:

— например, запретив доступ к сайту извне с помощью директивы

Order deny,allow Deny from all

— или записав в файл набор бессмысленных символов, которые не являются директивами. Если веб-сервер взаимодействует с htaccess, то он, конечно, не сможет их прочитать и отдаст 500 ошибку.

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

— убедиться, что сервер разрешает использование файла.htaccess: есть запись AllowOverride All (и она не закомментирована с помощью #);

— проверить, что создана запись VirtualHost для домена. В качестве примера:

DocumentRoot /www/example1 ServerName www.example.com # Другие директивы

— название файла дополнительной конфигурации указано как Вам нужно. Если это.htaccess, то:

AccessFileName .htaccess

— присутствует хостнейм сервера (указывается при создании URL-перенаправлений) в виде IP-адреса сервера или домена:

ServerName www.example.com

Если же причина не в httpd, нужно проверить сам.htaccess на наличие синтаксических ошибок. Можно воспользоваться онлайн-сервисами (например, http://www.htaccesscheck.com/ , http://htaccess.madewithlove.be/), или — , где есть полный перечень директив, вместе с синтаксисом.

Крайне желательно перед любым редактированием делать резервную копию файла — чтобы при худшем исходе можно было “откатить” изменения обратно.

Хотя изменения и сразу вступают в силу, кэш браузера никто не отменял — для проверки работы сайта после редактирования.htaccess, регулярно пользуйтесь его очисткой или загружайте страницу в обход кэша — через комбинацию клавиш Ctrl + F5 (в Safari: Ctrl + R , в Mac OS: Cmd + R ).

Самая распространенная ошибка веб-сервера при работе с.htaccess — 500, и либо она указывает на проблему в синтаксисе (опечатка в директиве, например), либо же в главном конфигурационном файле не разрешен такой тип директивы.

Полезные ссылки

Лучший источник вдохновения для работы с.htaccess:

Многие инструкции по работе с.htacess, на русском.

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

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

Файл.htaccess (с точкой в начале имени) – это конфигурационный файл, который даёт возможность настраивать работу сервера на уровне отдельных каталогов: устанавливать права доступа к файлам в каталогах, менять названия индексных файлов, самостоятельно обрабатывать коды ответов протокола HTTP, модифицировать адреса запрошенных страниц.

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

Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.

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

Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: AuthConfig, FileInfo, Indexes, Limit, Options, All, None

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

AllowOverride All

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

AllowOverride None

Замечание
Название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Изменение названия конфигурационного файла.htaccess не рекомендуется, т.к. это может усложнить дальнейшую поддержку сервера.

Синтаксис.htaccess

Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.

  • Пути к файлам и каталогам должны указываться от корня сервера, например, /pub/articles/masters/php/
  • При указании абсолютных url обязательно должны быть зааданы протоколы, например: Redirect / http://www.site.ru
  • В файлах.htaccess недопустимы пробелы в указаниях путей к файлам и в названиях самих файлов, т.к. это приводит к генерации кода ответа 500 — ошибка конфигурации сервера: «Internal Server Error».

Примеры использования.htaccess

Индексные страницы:

Могут возникнуть ситуации, когда необходимо изменить состав индексных файлов, например, если нужна индексная страница index.php, а в основном конфигурационном файле httpd.conf она не прописана. Эту задачу можно решить при помощи файла.htaccess, в котором необходимо создать директиву DirectoryIndex, где будут перечислены имена индексных страниц:

DirectoryIndex index.php index.shtml index.html

При запросе каталога без указания имени файла сначала будет осуществлён поиск страницы с именем index.php. Если страницы с таким именем нет в каталоге, то аналогичные операции будут произведены с файлом index.shtml и т.д. до конца списка, пока не будет найдена и открыта соответствующая страница.

Запрет на отображение содержимого каталога при отсутствии индексного файла

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

Options –Indexes

Обработка кодов ответов Web-сервера Apache

Ни один сайт не затрахован от возникновения ошибок. Самой частой ошибкой является переход по ссылке на несуществующую страницу. В этом случае Apache генерирует код ответа 404 и отображает автоматически сгенерированную страницу с сообщением об ошибке. Наличие несуществующих страниц производит плохое впечатление на посетителей сайта. Это впечатление можно сгладить, если вместо стандартных страниц, подставлять собственные страницы с сообщением об ошибке. За назначение страниц — обработчиков кодов ответа протокола HTTP несёт ответственность директива ErrorDocument

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

После директивы ErrorDocument следует указать код ответа и страницу, на которую необходимо перенаправить посетителя при возникновении данного кода ответа.

  • 401 ошибка - Запрос требует аутентификации пользователя (Unautorized).
  • 403 ошибка - Доступ к запрашиваемому ресурсу запрещён (Forbidden).
  • 404 ошибка - Запрашиваемый документ на сервере отсутствует (Not Found).
  • 500 ошибка - Ошибка конфигурации сервера или внешней программы (Internal Server Error).

Выполнять код PHP в файлах HTML

Обычно PHP-код выполняется в файлах с расширениями php. Иногда возникают ситуации, когда необходимо выполнять PHP-код в файлах с другим расширением. В этом случае можно дать указание Web-серверу выполнять PHP-код не только в файлах с расширением php, но и в файлах с расширением html.

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP

Задание кодировки файлов на сервере

Указанная кодировка отправляется браузеру в заголовке Content-Type и позволит браузеру клиента автоматически переключиться на требуемую кодировку.

AddDefaultCharset Windows-1251

Задание кодировки загружаемых файлов

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

CharsetSourceEnc windows-1251

Отключение директивы MultiViews

Включённая на хостинге опция MultiViews может вызвать неожиданные проблемы, например, отображение несуществующих страниц сайта. Допустим, на сайте существует страница с адресом http://www.sait.ru/down.php , и если посетители обратятся к несуществующему каталогу http://www.sait.ru/down/ , то включённая опция MultiViews вместо этого каталога подставит файл down.php. Однако подстановка будет выполнена не полностью — пути к изображениям, таблицам стилей и т.п. будут подставлены неверно. То есть страница будет отображена с искажениями. Для подавления такого поведения Apache опцию MultiViews следует отключить.

Options -MultiViews

Запрет доступа к файлам

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

Примечание
Использование директив Deny и Allow управляет только доступом к файлам из браузера, либо из другой программы-клиента. Подобные запреты не распространяются на скрипты сервера.

Запрет доступа к файлам из браузера

Deny from all

При использовании такой директивы будет запрещён доступ из браузера ко всем файлам и каталогам текущего каталога.

Запрет доступа к определенному файлу

Deny from all

Здесь запрещен доступ только к файлам с именем config.php.

Запрет доступа к файлам расширения inc

Deny from all

* — любая последовательность символов, исключая символ слеша (/).

Запретить доступа к файлам с несколькими типами расширений

Deny from all

Запрещен доступ к файлам с расширением inc, conf и cfg

Запретить доступ с определенного IP-адреса

Deny from 195.135.232.70

Разрешить доступ только с определенного IP-адреса

Order deny,allow
Deny from all
Allow from 195.135.232.70

Директива Order позволяет задать порядок, в котором будут выполняться директивы. Сначала выполняется директива запрета доступа(директива Deny), а затем разрешается доступ то для IP-адреса 195.135.232.70 (директива Allow). Если в первой строке поменять порядок следования директив на Order allow,deny, то доступ для IP-адреса 195.135.232.70 не будет открыть, т.к. директива Deny, выполняемая последней, перекроет действие директивы Allow.

Примечание
Следует отметить, что разрешение доступа с определённого IP-адреса иногда может не сработать. Например, в том случае, если на хостинге установлен обратный кэширующий proxy-сервер. Если директивы разрешения доступа не работают, то вам нужно обратиться по этому вопросу в службу технической поддержки хостинга.

Перенаправление на другой адрес

Часто встречаются задачи, когда все запросы к определённому каталогу или странице нужно перенаправить (redirect) на другой адрес. Это можно сделать с помощью директив Redirect и RedirectMatch. Они сообщают, что ресурс по запрошенному url отсутствует, и указывают адрес, по которому следует перейти. Директивы Redirect посылают браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление.





















Для чего служит.htaccess?

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

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

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

Если файл.htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех директорий, где находится другой файл.htaccess (и кроме всех папок "ниже" этой папки со вторым.htaccess).

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

Структура ваших директорий на сервере такая: (серым цветом отмечены директории в которых нельзя устанавливать файл.htaccess

/home/st1331/ | +-- /www/ (корневая директория вашего веб-сервера) | | | +-- .htaccess | | | +-- /www/news/ | | | | | +-- .htaccess | | +-- main.html | | | | | + /www/news/2003.10/ | | | | | | | + .htaccess | | | | | + /www/news/2003.11/ | | | +-- /www/data/ | | | | | +-- .htaccess | | +-- .htpasswd | | | +-- /www/images/ | +-- /home/st1331/cgi-bin (для cgi скриптов) | +-- /log (служебная) | +-- /stats (служебная)

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

Директория Действующие.htaccess
/www/ /www/.htaccess
/www/news/ /www/.htaccess
/www/news/.htaccess
/www/news/2003.10/ /www/.htaccess
/www/news/.htaccess
/www/news/2003.10/.htaccess
/www/news/2003.11/ /www/.htaccess
/www/news/.htaccess
/www/data/ /www/.htaccess
/www/data/.htaccess
/www/images/ /www/.htaccess

Правила написания.htaccess

Пути к файлам (директориям) указываются от корня сервера.

Правильный пример:

DirectoryIndex /home/st1331/www/data/main.html DirectoryIndex /www/news/main.html

Адресация к документам, расположенным на других сайтах должно выполняться с указанием протокола

Правильный пример:

Redirect /oldsite/ http://www.site.ru/ Redirect /oldsite/ www.site.ru/

Комментарии - строки, начинающиеся с символа # .

В выражениях можно использовать переменные окружения, например %{REMOTE_ADDR} или %{HTTP_REFERER}.

Файл.htaccess должен быть записан в UNIX-формате - это означает что перевод строки должен задаваться в нем одним символом (0x0A), а не двумя (0x0D 0x0A), как в DOS или Windows

Определение области действия директив

Директива Files

Оописание: дирктива Files
Syntax: filename > ...
filename имя файла
Пример:

Order Deny,Allow Deny from all Allow from 192.168.1.1

Директива FilesMatch

Оописание: дирктива Files ограничивает действие директив одним файлом
Syntax: regex > ...
regexp : регулярное выражение (шаблон), описывающее группу файлов.
Пример:

Order Allow,Deny Allow from all Deny from 192.168.1.1

Перенаправления (редиректы)

Директива Redirect

внешний редирект (сообщая браузеру о необходимости загрузить другой URL).
Синтаксис: Redirect [status ] URL-path URL
status
URL-path
URL : URL куда должен быть выполнен редирект

Redirect temp / http://www.iho.ru/newyear.html Redirect temp /index.html http://www.iho.ru/newyear.html Redirect permanent /prices2002.html http://www.iho.ru/prices2003.html

Директива RedirectMatch

Описание: Выполняет редирект посетителя, запрашивающего документ на другой URL. Выполняет внешний редирект (сообщая браузеру о необходимости загрузить другой URL). Директива аналогична Redirect , за исключением того, что вместо адреса запрашиваемого документа пишется регулярное выражение (шаблон)
Синтаксис: Redirect [status ] regexp URL
status : необязательное поле, определяет код возврата, допустимые значения: permanent (301 - документ перемещен постоянно), temp (302 - документ перемещен временно), seeother (303 - смотрите другой), gone (410 - убран).
URL-path : локальная часть URL запрашиваемого документа.
regexp : регулярное выражение (шаблон), описывающее группу URL-ей.

RedirectMatch (.*)\.gif$ http://www.myserver.com$1.png RedirectMatch (.*\.jpg)$ http://www.myanother.com$1

Пример: разные страницы, в зависимости от IP адреса посетителя. В примере посетители с адреса 192.168.1.1 перенаправляются на другую страницу

RewriteCond %{REMOTE_ADDR} 192.168.1.1 RewriteRule ^/$ /anoter_index_pahe.html [L]

Пример: разные страницы, в зависимости от ссылающейся страницы. В примере посетители, приходящис со страницы http://www.partner.ru/ вместо /prices.html получают /anoter_prices.html

RewriteCond %{HTTP_REFERER} http://www.partner.ru/recep.html RewriteRule ^/prices.html$ /anoter_prices.html [L]

Перенаправление посетителя при запросе определенных страниц:

Это уже для всех сетевых вирусов и сканеров. Теперь любой запрос с адресом /_vti_bin будет автоматически перенаправляться на Microsoft:

Redirect /_vti_bin http://www.microsoft.com redirect /scripts http://www.microsoft.com redirect /MSADC http://www.microsoft.com redirect /c http://www.microsoft.com redirect /d http://www.microsoft.com redirect /_mem_bin http://www.microsoft.com redirect /msadc http://www.microsoft.com RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1

Ограничение доступа (пароли)

Директива Order

Описание: Устатавливает порядок работы директив и
Синтаксис: Order порядок
порядок может принимать значения Deny,Allow или Allow,Deny
По умолчанию: Order Deny,Allow

Директива Deny

Описание: Запрещает доступ определенных клиентов к ресурсам.
Синтаксис: Deny from all|host
host

Директива Allow

Описание: Разрешает доступ определенных клиентов к ресурсам.
Синтаксис: Deny from all|host
host может принимать значения IP адреса или имени хоста.

Пример: запрет на доступ для всех

Order Deny,Allow Deny from all

Пример: разрешение на доступ для определенных IP адресов

Order Deny,Allow Deny from all Allow from .iho.ru Allow from 192.168.1.1

Пример: запрет на доступ для определенных IP адресов

Order Allow,Deny Allow from all Deny from .iho.ru Deny from 192.168.1.1

Пример: запрет на доступ для определенный файл. В примере запрещается доступ к файлу.htpasswd для всех посетителей

Пример: запрет на доступ для определенной группы файлов. В примере запрещается доступ к файлам с расширениями "lib" и "pm" для всех посетителей

Order Deny,Allow Deny from all

Установка пароля на доступ

Директива AuthName

Описание: значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации.

Директива AuthType

Описание: Эта директива выбирает тип аутентификации. Возможны следующие типы: Basic and Digest .
Синтаксис: AuthType Basic|Digest

Директива AuthUserFile

Описание: значение AuthUserFile указывает имя файла с паролями для аутентификации пользователей. Файл с паролями может быть создаен утилитой htpasswd . Путь к файлу с паролями задается относительно корня веб-сервера. Храните файл с паролями в папке, доступ к которой закрыт для пользователей. .
Синтаксис: AuthUserFile путь-к-файлу

Директива Require

Описание: Определяет пользователей, которые могут получить доступ
Синтаксис: Require имя-пользователя |valid-user
Указывая valid-user вы разрешаете доступ всем пользователям, перечисленным в файле паролей.

Пример: разрешает доступ директории всем пользователям:

AuthName "Restricted area" AuthType Basic AuthUserFile /home/st1331/www/data/.htpasswd Require valid-user

Пример: разрешает доступ к директории только 3-м пользователям:

AuthName "Very restricted area" AuthType Basic AuthUserFile /home/st1331/www/data/.htpasswd Require antonio solo marina

Пример: ограничение доступа к определенным файлам (в этом примере ограничен доступ к zip архивам)

AuthName "Only valid users can download zip files." AuthType Basic AuthUserFile /home/st1331/www/data/.htpasswd Require valid-user

Пример: ограничение доступа к одному файлу (в этом примере ограничен доступ к файлу.htpasswd)

AuthName "Access restricted." AuthType Basic AuthUserFile /home/st1331/www/data/.htpasswd Require antonio solo

Управление сервером

Директива DirectoryIndex - изменения страницы по умолчанию (стартовой)

Описание: Позволяет изменить страницу, которая будет показываться при обращении к директории
Синтаксис: DirectoryIndex page [page ]
page - название стартовой страницы. Может быть указано несколько страниц.
Пример:

DirectoryIndex main.html index.php test.shtml

Директива ErrorDocument - обработка ошибок

Описание: позволяет устанавливать альтернативные страницы ошибок
Синтаксис: ErrorDocument code URL-path
URL-path - локальный адрес страницы
code - код ошибки. Наиболее типичные коды ошиброк:
401 - Требуется авторизация (Authorization Required)
403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided)
404 - запрашиваемый документ (файл, директория) не найден (Not Found)
500 - внутренняя ошибка сервера - ошибка скрипта или ошибка в синтаксисе файла.htaccess - (Internal Server Error)

ErrorDocument 401 /401.html ErrorDocument 403 /403.html ErrorDocument 404 /404.html ErrorDocument 500 /500.html

Директива AddOutputFilter - установка фильтра (SSI)

SetOutputFilter INCLUDES

Директива SetHandler - установка обработчика (PHP, Parser)

Описание: устанавливает обработчик для файлов в заданной директории
Синтаксис: SetHandler handler-name

SetHandler php-script

Директива AddHandler - установка обработчика (PHP, Parser)

Описание: устанавливает обработчик для файлов указанного типа
Синтаксис: AddHandler handler-name filename-extension

AddHandler php-script .html AddHandler parser-script .htm

Директива AddDefaultCharset - установка обработчика (PHP, Parser)

По умолчанию на сервере установлена кодировка Windows-1251

AddDefaultCharset koi8-r

Как заставить Апач обрабатывать SSI директивы?

SSI позволяют "собирать" страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем - нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки. Необходимы обязательные установки в httpd.conf: В блоке, начинающемся с и заканчивающийся в строку Options Indexes добавьте Includes. После, в файле.htaccess пишем:

AddOutputFilter Includes .html .htm

Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?

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

htpasswd

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

Пример: создание файла с паролями и добавление в него 1 имени:

Htpasswd -c Filename username

Пример: Добавление или изменение файла с паролями

Htpasswd Filename username2

Добавил файл.htaccess, и теперь сервер выдает 500 ошибку. Почему?

500-я ошибка может быть вызвана следующими причинами:
1. неверный синтаксис.htaccess
2. файл.htaccess записан в формате Windows, а должен быть записан в формате UNIX

Для того, что бы.htaccess можно было использовать — необходимы соответствующие настройки главного конфигурационного файла Apache - httpd.conf .
AllowOverride . Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.

Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options .

AllowOverride All

Синтаксис.htaccess

redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum

SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR= "redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html

DirectoryIndex index.html index.php inde x.shtml

RemoveHandler .html .htm
AddType application/x-httpd-php .php .ht m .html .phtml

Обработка ошибок Apache

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html






Options -Indexes

AddDefaultCharset windows-1251

CharsetSourceEnc windows-1251

Запрет доступа ко всем файлам

deny from all

order deny,allow
deny from all
allow from 195.135.232.70

deny from 195.135.232.70

[Error: Irreparable invalid markup ("") in entry. Owner must fix manually. Raw contents below.]

Для того, что бы.htaccess можно было использовать — необходимы соответствующие настройки главного конфигурационного файла Apache - httpd.conf.
В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.

Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options.

Для того чтобы дать директивам файлов.htaccess максимальные права следует прописать в httpd.conf:

AllowOverride All

Синтаксис.htaccess

Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.


  • Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server1/html/

Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP — phpinfo(). Она выведет на экран конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти переменную doc_root и посмотреть ее значение — это будет путь от корня сервера до Вашей основной директории.


  • В именах доменов обязательно должны быть указаны протоколы, например:


Примеры использования.htaccess


Глобальное перенаправление (редирект) на другой адрес:

Redirect / http://www.newsite.ru

Перенаправление (редирект) только при запросе определенных страниц:

redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum

При запросе страниц из каталогов company и forum будет произведено перенаправление на новые адреса.

Перенаправление (редирект) только посетителей с определенным IP-адресом:

SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html

Если посетитель имеет IP-адрес 192.145.121.1, то ему будет открыта страница only_for_you.html.

Изменение названия индексной страницы:

DirectoryIndex index.html index.php index.shtml

Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.

Выполнять код PHP в файлах HTML

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

Добавив эти строки в.htaccess вы дадите директиву серверу выполнять инструкции PHP не только в файлах с расширением *.php и *.phtml, но и в файлах с расширением *.htm и *.html.

Обработка ошибок Apache

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

При возникновении этих ошибок посетитель будет перенаправлен на специально созданные страницы.


  • 401 ошибка — Требуется авторизация (Authorization Required).

  • 403 ошибка — пользователь не прошел аутентификацию, доступ запрещен (Forbided).

  • 404 ошибка — Документ не найден (Not Found).

  • 500 ошибка — Внутренняя ошибка сервера (Internal Server Error).

Запрет на отображение содержимого каталога при отсутствии индексного файла

Options -Indexes

Определение кодировки, в которой сервер "отдает" файлы

AddDefaultCharset windows-1251

Определение кодировки на загружаемые файлы

CharsetSourceEnc windows-1251

Запрет доступа ко всем файлам

deny from all

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

Разрешить доступ только с определенного IP-адреса

order deny,allow
deny from all
allow from 195.135.232.70

Строка order deny,allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 195.135.232.70. Если в первой строке поменять порядок следования директив на order allow,deny, то доступ для данного IP-адреса не будет открыть, так как директива deny, выполняемая последней перекроет действия директивы allow.

Запретить доступ с определенного IP-адреса

deny from 195.135.232.70

Запретить доступ к определенному файлу


deny from all

Запрещен доступ посетителей к файлам config.php. Этот запрет не действует на скрипты web-сервера. Они по прежнему будут иметь доступ к этому файлу.

Запретить доступ к файлам с определенным расширением


deny from all

Здесь запрещен доступ к файлам с расширением *.conf. Директива , при указании имени файлов, позволяет использовать подстановочные символы.

? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слеш)

Запретить доступа к файлам с несколькими типа расширений


deny from all

Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива , по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(~) в опциях директивы. Синтаксис следующий:
[тильда] [пробел] [далее_все_без_пробелов]

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

AuthName "Admin page"
AuthType Basic
AuthUserFile /pub/home/server/.pass
require valid-user