Глобальное перенаправление на новый адрес. Примеры наиболее частого использования файла htaccess
Начнем издалека, чтобы и новичкам был понятен принцип работы описываемого в статье файла. Для функционирования сайта в Интернете нужен не только компьютер и выход к сети, но и установленное на него специальное ПО, которое обеспечивает доступ к данным по протоколам 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
Запрет доступа к файлу:
Защита директории с помощью пароля:
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, которая оговаривает пределы действия правила по названию файла, используя регулярные выражения. С ее помощью, например, можно запретить доступ к определенным файлам:
Есть некоторые директивы, которые не поддерживаются на наших серверах с виртуальным хостингом, но вы можете их разрешить на своем ВПС, например.
Причина в том, что работающий как 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 для домена. В качестве примера:
— название файла дополнительной конфигурации указано как Вам нужно. Если это.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, на русском.
Инструкции файла.htaccess
Файл.htaccess позволяет изменять многие настройки вашего сайта - как настройки веб-сервера Apache, так и опции PHP. Директивы, указанные в файле.htaccess, распространяются на ту директорию, в которой он находится, а также на все вложенные директории (за одним исключением, которое будет рассмотрено ниже), в том числе и на поддомены (поскольку директории поддоменов являются поддиректориями основного сайта).Как правило, файл.htaccess создается в корневой директории сайта и иногда в директориях, которые требуют специфического поведения веб-сервера (запрет отображение списка файлов, включение SSI, авторизация и прочее).
Вы можете самостоятельно создавать файл.htaccess с помощью FTP-клиента и работать с ним как с любыми другими файлами Вашего сайта.
Почему только что созданный файл.htaccess не отображается в списке файлов?
Некоторые FTP-клиенты считают файлы, начинающиеся с точки, скрытыми и не отображают их по умолчанию. В таких случаях для того, чтобы видеть файл.htaccess, необходимо в настройках FTP-клиента включить настройку «Отображать скрытые файлы».
Почему файл.htaccess, размещенный в корне сайта, не работает во вложенных директориях?
Это связано с оптимизацией обработки статических файлов.
Сайты обычно содержат большое количество статических файлов. Это файлы, которые не требуют запуска скриптов для их отображения: картинки, музыка, видео, css, javascript, простые html-страницы. Для ускорения работы сайтов они обрабатываются, минуя основной веб-сервер и без анализа файлов.htaccess.
Иногда возникает необходимость запретить в конкретной директории оптимизацию обработки статических файлов. Например, если это картинки, на которые нужно накладывать водяной знак, перенаправляя запросы к ним на специальный скрипт.
Чтобы файлы в какой-либо директории всегда обрабатывались без оптимизации, необходимо в этой директории создать файл.htaccess. Этот файл может не содержать никаких директив, достаточно лишь его существования.
Важно не забывать, что отключение оптимизации может повлиять на скорость работы Вашего сайта и использование ресурсов тарифного плана.
Почему поддомен показывает ошибку?
Для поддомена наследуются настройки.htaccess домена. Если в настройках.htaccess домена используются правила mod_rewrite, они могут приводить к некорректной работе поддомена. Чтобы правила mod_rewrite домена не действовали на поддомен, необходимо добавить в файл.htaccess поддомена следующую строчку:
RewriteEngine off
Почему при открытии директории сайта в браузере показывается 403 Forbidden?
При открытии директории без указания конкретного файла веб-сервер ищет файлы index.htm, index.html, index.php для отображения (индексные файлы). Если индексные файлы отсутствуют, сервер возвращает ошибку 403 Forbidden, так как отображение списка файлов в директории по умолчанию запрещено.
Чтобы ошибка 403 Forbidden не отображалась, либо создайте в директории индексный файл, либо добавьте в файле.htaccess опцию:
Options +Indexes
Установка индексного файла для сайта
По умолчанию индексным файлом вашего сайта веб-сервер считает файл (в порядке приоритета): index.html , index.php .
Чтобы установить в качестве индексного файла произвольный файл, следует добавить инструкцию:
DirectoryIndex имя_файла
Например, следующая инструкция предписывает веб-серверу при обращении к сайту открывать в качестве индексной страницы скрипт на языке Perl, размещенный в директории cgi-bin вашего сайта:
DirectoryIndex /cgi-bin/engine.pl
Как включить отображение ошибок PHP?
Для отображения ошибок PHP добавьте в файл.htaccess директиву:
Php_value display_errors 1
Как изменить максимальный размер загружаемых файлов в PHP?
Максимальный размер загружаемых файлов указывается в.htaccess с помощью двух директив:
Php_value upload_max_filesize 20M php_value post_max_size 20M
Вместо 20M укажите желаемый размер ограничения. Значение этих параметров не может быть больше 50M. Обратите внимание, что символ “M” (латинская M) указывается слитно со значением.
Как указать интерпретатору PHP необходимость обрабатывать не только файлы.php?
Чтобы заставить интерпретатор PHP обрабатывать файлы с произвольным расширением, нужно добавить соответствующую инструкцию в файл.htaccess, расположенный в корневой директории вашего сайта. Например, следующая инструкция укажет интерпретатору PHP на необходимость обрабатывать файлы с расширением.phtml:
AddType application/x-httpd-php .phtml
Как изменить время хранения сессий PHP
Изменение времени хранения сессий может потребоваться, например, если вы хотите, чтобы данные об авторизации пользователей на вашем сайте сохранялись дольше. По умолчанию время хранения сессий - 1440 секунд (24 минуты), cookie с идентификатором сессии - до закрытия браузера пользователем.
Для изменения времени хранения сессий PHP необходимо внести несколько изменений в.htaccess. Так как конкретные настройки могут зависеть от особенностей работы вашего сайта с посетителями, рекомендуем перед внесением изменений проконсультироваться с профессиональным разработчиком. Возможно, непосредственно для вашего сайта более эффективным окажется альтернативный механизм хранения данных, привязанных к посетителю (например, только через cookie), либо альтернативный механизм хранения сессий PHP (установленный с помощью session_set_save_handler()).
Для изменения времени хранения сессий добавьте в.htaccess следующие директивы:
# Создайте отдельную директорию для хранения сессий вашего сайта, # например, domains/ВАШ_САЙТ/tmp. Это необходимо, чтобы PHP не удалял сессии сайта # при очистке старых сессий других сайтов, работающих на аккаунте. # Установите директорию хранения сессий для сайта с помощью session.save_path. php_value session.save_path /home/ВАШ_ЛОГИН/domains/ВАШ_САЙТ/tmp # Установите максимальное время жизни сессии в секундах. # 604800 - 1 неделя. php_value session.gc_maxlifetime 604800 # Установите время жизни cookie, которая сохраняет идентификатор сессии # в браузере пользователя. php_value session.cookie_lifetime 604800
Обратите внимание: если сессия открывается для каждого неавторизованного пользователя, при большом количестве посетителей и длительном времени сохранения сессий образуется большое количество файлов в папке, указанной в session.save_path. Это может вызывать замедления сайта в момент запуска механизма очистки старых сессий и увеличивать количество ресурсов, необходимых для работы сайта. В случае работы с большим количеством сессий мы рекомендуем использовать альтернативные механизмы их хранения и очистки, например:
- Указывать вложенность директорий хранения сессий с помощью аргумента N в session.save_path. Очищать старые сессии при этом необходимо собственными скриптами. Более подробная информация об этом методе находится в описании session.save_path в документации PHP.
- Реализовать собственный механизм хранения сессий (например, в MySQL) и установить его с помощью session_set_save_handler() .
Как включить SSI
Директивы SSI (Server Side Includes) по умолчанию обрабатываются в файлах с расширением.shtml (например, index.shtml). Чтобы SSI обрабатывались и в других файлах, необходимо в файле.htaccess указать следующие директивы:
AddType text/html .html .ssi AddOutputFilter INCLUDES .html .ssi
Вместо “.ssi .html” укажите расширения файлов, в которых должны обрабатываться директивы SSI.
Как настроить выполнение скриптов CGI?
Для выполнения скриптов CGI в какой-либо папке необходимо настроить веб-сервер соответствующим образом с помощью файла.htaccess.
- В папке, в которой должны выполняться скрипты CGI, создайте файл.htaccess вида: Options +ExecCGI
AddHandler cgi-script .cgi .pl Вместо “.cgi .pl” укажите список расширений, которые должны обрабатываться как скрипты. - Загрузите скрипты в папку.
- С помощью Вашего файлового менеджера установите файлам скриптов права на выполнение (755).
Как изменить ограничение на использование оперативной памяти в PHP?
Для изменения ограничения на оперативную память используйте следующую директиву в.htaccess:
Php_value memory_limit 128M
Вместо 128M укажите желаемый размер ограничения. Обратите внимание, что символ “M” (латинская M) указывается слитно со значением.
Как сделать так, чтобы сайт всегда открывался по основному имени?
Если у вашего сайта несколько имен, но вы хотите, чтобы пользователи всегда видели в адресной строке основное имя сайта, добавьте в файл.htaccess в корне вашего сайта следующие строки:
RewriteEngine on RewriteCond %{HTTP_HOST} ^www.site.com RewriteRule ^(.*) http://site.com/$1
Замените example.com на основное имя вашего сайта. Теперь при обращении к сайту пользователи будут автоматически перенаправлены на его основное имя.
Какие еще настройки PHP можно задавать в.htaccess?
В документации на сайте разработчика указан полный список директив PHP . В файле.htaccess можно изменять директивы, значение графы Changeable для которых соответствует PHP_INI_PERDIR или PHP_INI_ALL.
Для того, что бы.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 ("
Для того, что бы.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-сервера. Они по прежнему будут иметь доступ к этому файлу.
Запретить доступ к файлам с определенным расширением
Здесь запрещен доступ к файлам с расширением *.conf. Директива
? - любой одиночный символ
* - любая последовательность символов, исключая символ / (слеш)
Запретить доступа к файлам с несколькими типа расширений
Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива
[тильда] [пробел] [далее_все_без_пробелов]
Установка пароля на директорию
AuthName "Admin page"
AuthType Basic
AuthUserFile /pub/home/server/.pass
require valid-user
Htaccess (с точкой в начале имени) – это файл, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок.
Как известно, конфигурационные директивы сервера Apache находятся в файлe httpd.conf. Но далеко не всегда у Вас будут права доступа к этому файлу. Например, если Вы используете для хостинга виртуальный сервер, когда один сервер Apache обслуживает множество сайтов, то, естественно, Вам никто не позволит менять его конфигурацию. Но, тем не менее, вы можете конфигурировать работу сервера в своих директориях. И делать вы это можете с помощью файлов.htaccess.
Файл.htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов.htaccess).
Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера, в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.
Настройки httpd.conf, разрешающие применение файлов.htaccess
Для того, что бы эти файлы.htaccess можно было использовать - необходимы соответствующие настройки главного конфигурационного файла. В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.
Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options .
Для того чтобы дать директивам файлов.htaccess максимальные права следует прописать в httpd.conf:
AllowOverride All
Примечание
При желании название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Но все же рекомендуется этого не делать.
Синтаксис.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.
Apache
- самый распространённый HTTP-сервер
. Распространяется бесплатно,
включая исходные тексты.
Поддерживаются сценарии на CGI
(включая FastCGI
), PHP
, Perl
, Java
. Аутентификация
- базовая
, message-digest
, TLS
(SSL)
. С апреля 1996 это самый популярный HTTP-сервер
в Интернете,
в августе 2007 года он работал на 51% всех веб-серверов.
.htaccess
- файл дополнительной конфигурации веб-сервера Apache
, а также подобных ему серверов.
Позволяет задавать большое
количество дополнительных параметров и разрешений для работы веб-сервера у отдельных пользователей (а также на
различных папках отдельных пользователей),
таких как управляемый доступ к каталогам
, переназначение типов файлов
и т.д., не предоставляя доступа
к главному
конфигурационному файлу, т.е. не влияя на
работу всего сервиса целиком.
.htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess присутствует в любом каталоге пользователя.
Файл .htaccess может быть размещен в любом каталоге сайта. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess ).
Директивы .htaccess
предоставляют пользователю широкий выбор возможностей по настройке своего сайта,
среди которых:
|
Список всех доступных директив можно посмотреть .
Описываются предпочтения клиента относительно типа документа.
IP-адрес посетителя.
Адрес посетителя в нормальной форме - например, rt99.net.ru
.
Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru
Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: kondr
Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к.
определяет дальнейший способ обработки информации.
Полный путь к веб-странице на сервере.
Содержит в себе все, что передавалось в скрипт.
Содержит строчку, переданную в качестве запроса при вызове CGI
скрипта.
Используется для идентификации пользователя
Cодержит путь к корневой директории сервера.
Почтовый адрес владельца сервера, указанный при установке.
IP-адрес вашего сайта.
Порт, на котором работает Apache.
Версия HTTP
протокола.
Название сервера, например, Apache/1.3.2 (Unix)
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
Переменные, предназначеные для работы со временем в разных форматах.
Это версия API
модуля Apache
(внутренний интерфейс между сервером и модулем) в
текущей сборке сервера, что определено в include/ap_mmn.h
.
Полная строка HTTP
-запроса, отправленная браузером серверу (т.е., «GET /index.html
HTTP/1.1»
).
Она не включает какие-либо дополнительные заголовки отправляемые браузером.
Ресурс, запрошенный в строке HTTP-запроса.
Полный путь в файловой системе сервера к файлу или скрипту, соответствующему этому запросу.
Условие - это шаблон условия, т.е. какое-либо регулярное выражение, применяемое к текущему экземпляру
"Сравниваемая Строка", т.е. "Сравниваемая Строка" просматривается на поиск соответствия Условию.
Помните, что Условие это perl
-совместимое регулярное выражение с некоторыми дополнениями:
Все эти проверки также могут быть предварены префиксом восклицательный знак ("!") для инвертирования их значения.
RewriteEngine
включает или выключает работу механизма преобразования. Если она установлена в положение
off
, этот модуль совсем не работает.
Заметьте, что по умолчанию настройки преобразований не наследуются. Это означает, что вы должны иметь RewriteEngine
on директиву для каждого
виртуального хоста, в котором вы хотите использовать этот модуль.
Синтаксис RewriteEngine
выглядит следующим образом:
Используйте для комбинирования условий в правилах OR
вместо AND
. Типичный пример - перенаправление
запросов на поддомены в отдельные каталоги.
Для выдачи разных сайтов для разных браузеров, согласно «User-Agent:»
заголовку запроса,
Вы можете использовать следующие директивы:
В подстановке вы можете использовать, в том числе, и специальные флаги путем добавления в качестве третьего аргумента директивы RewriteRule . Флаги - это разделённый запятыми следующий список флагов:
"redirect|R [=code]"
(вызывает редирект)
Префикс в Подстановке вида http://thishost[:thisport]/
(создающий новый URL
из какого-либо
URI
)
запускает внешний редирект (перенаправление). Если нет никакого кода, в подстановке ответ будет со
HTTP
статусом 302 (ВРЕМЕННО ПЕРЕМЕЩЕН). Для остановки процесса преобразования
вам также нужно написать флаг "L"
.
"forbidden|F [=code]"
(делает URL запрещенным)
Это делает текущий URL
запрещённым, например, клиенту немедленно отправляется ответ
с HTTP
статусом 403 (ЗАПРЕЩЕНО). Используйте этот флаг в сочетании с соответствующими
RewriteConds
для блокирования URL
по некоторым критериям.
"gone|G [=code]"
(делает URL «мёртвым»)
Этот флаг делает текущий URL
«мертвым», т.е., немедленно отправляется HTTP
ответ
со статусом 410 (GONE
). Используйте этот флаг для маркировки «мертвыми» несуществующие более
страницы.
"proxy|P [=code]"
(вызвает прокси)
Этот флаг помечает подстановочную часть как внутренний запрос прокси и немедленно
(т.е. процесс преобразования здесь останавливается) пропускает его через прокси-модуль.
Используйте этот флаг для того, чтобы добиться более мощной реализации директивы ProxyPass
,
интегрирующей некоторое содержимое на удаленных серверах в пространство имён локального сервера.
"last|L [=code]"
(последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких
правил преобразований. Используйте этот флаг для того, чтобы не преобразовывать
текущий URL
другими, следующими за этим, правилами преобразований.
"next|N [=code]"
(следуюший раунд)
Перезапустить процесс преобразований (начав с первого правила). В этом случае URL
снова
сопоставляется неким условиям, но не оригинальный URL
, а URL
вышедший из последнего
правила преобразования. Используйте этот флаг для перезапуска процесса преобразований, т.е.
безусловному переходу на начало цикла.
"chain|C [=code]"
(связь со следующим правилом)
Этот флаг связывает текущее правило со следующим (которое, в свою очередь, может
быть связано со следующим за ним, и т.д.). Это имеет следующий эффект: если есть
соответствие правилу, процесс продолжается как обычно, т.е. флаг не производит
никакого эффекта. Если правило не соответствует условию, все следующие, связанные
правила, пропускаются.
"type|T=MIME-тип [=code]"
(принудительно установить MIME тип)
Принудительно установить MIME-тип
целевого файла в MIME-тип
. К примеру, это можно
использовать для имитации mod_alias
директивы ScriptAlias
, которая принудительно
устанавливает для всех файлов внутри отображаемого каталога MIME
тип
равный «application/x-httpd-cgi»
.
"nosubreq|NS [=code]"
(используется только в случае не внутреннего подзапроса)
Этот флаг дает команду механизму преобразований пропустить директиву, если текущий подзапрос
является внутренним подзапросом. К примеру, внутренние подзапросы в Apache
происходят тогда,
когда mod_include пытается получить информацию о возможных файлах по умолчанию для каталогов
(index.xxx). При подзапросах это не всегда полезно и даже иногда вызывает проблему в работе
набора директив преобразований. Используйте этот флаг для исключения некоторых правил.
"nocase|NC [=code]"
(не учитывать регистр)
Это делает Шаблон нечувствительным к регистру, т.е. нет различий между "A-Z" и "a-z",
когда Шаблон применяется к текущему URL
.
"qsappend|QSA [=code]"
(добавлять строку запроса)
Этот флаг указывает механизму преобразований на добавление, а не замену,
строки запроса из URL
к существующей, в строке подстановки. Используйте
это когда вы хотите добавлять дополнительные данные в строку запроса с
помощью директив преобразований.
"noescape|NE [=code]"
Этот флаг не даёт mod_rewrite
применять обычные правила экранирования URI
к результату
преобразования.
Обычно, специальные символы (такие как "%", "$", ";", и так далее) будут экранированы их шестнадцатиричными
подстановками ("%25", "%24", и "%3B", соответственно); этот флаг не дает это делать.
(не экранировать URI при выводе)
Если в подкаталогах в .htaccess нет ни одной директивы модуля mod_rewrite , то все правила преобразования наследуются из родительского каталога.
При наличии в файле .htaccess каких-либо директив модуля mod_rewrite не наследуется ничего, а состояние по умолчанию выставляется таким же, как в главном конфигурационном файле веб-сервера (по умолчанию "off"). Поэтому, если нужны правила преобразования для конкретного каталога, то нужно еще раз вставить директиву "RewriteEngine on " в .htaccess для конкретного каталога.
При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу - необходимо выставить в начале следующее: "RewriteEngine on " и "RewriteOptions inherit " - последняя директива сообщает серверу о продолжении.
Примеры использования mod_rewrite можно посмотреть
Если у Вас установлена операционная система семейства Windows , Вы можете подключится к серверу по SSH (инструкцию по подключению можно найти ) и воспользоваться утилитой htpasswd .
Запустив htpasswd
без параметров мы увидим:
beget@ginger
~ #
htpasswd Usage: htpasswd [-cmdps] passwordfile username htpasswd -b passwordfile username password -c Create a new file. beget@ginger ~ # |
Здесь не будут рассматриваться все параметры этой команды, но вы можете сами прочитать подробности, запустив htpasswd в unix shell , или ознакомившись с соответствующей страницей документации по Apache.
Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:
А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть,
мы просто не будем использовать ключ "-c" :
Указывая valid-user , Вы разрешаете доступ всем пользователям, перечисленным в файле паролей.
Приведем пример для доступа определенных пользователей из файла с паролями .htpasswd
|
Следует помнить, что при таком ограничении доступа пароли передаются по каналам связи в открытом виде и при определенных обстоятельствах могут быть перехвачены злоумышленниками. Поэтому в целях безопасности рекомендуется организовывать доступ к закрытым областям веб-сайта через защищенное SSL-соединение .