510 likes | 801 Views
Конфигурационный файл . htaccess. Лекция 8. Web- сервер Apache. Apache – Web- сервер с открытым исходным кодом. Имеет гибкую конфигурацию. Особенности. . htaccess — файл дополнительной конфигурации веб-сервера Apache , а также подобных ему серверов.
E N D
Конфигурационный файл .htaccess Лекция 8
Web-сервер Apache • Apache – Web-сервер с открытым исходным кодом. Имеет гибкую конфигурацию.
Особенности • .htaccess — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. • Файл .htaccess – расширение файла конфигурации httpd.conf. • Позволяет задавать множество параметров, включая: • Управляемый доступ к каталогам • Переназначение типов файлов
Особенности • .htaccess действует только на ту директорию, в котором он расположен и на его дочерние каталоги • Может быть размещён в любом каталоге сайта
Директивы перенаправления (редирект) Redirect/ http://www.example.com#http: //www.example.com - URL На который мы перенаправляем запросы
Директивы простого перенаправления Redirect /linux http://www.linux.org Redirect /linux/download.html http://www.linux.org/download_info.html Redirect301 /kernel http://www.linux.org Теперь при наборе http://mysite.ru/linux будут открываться http://www.linux.org. В последнем примере Web-сервер будет передавать код 301, что означает «документ перемещен постоянно».
Синтаксис Redirect Redirect [status] URL_LOCAL URL_REDIRECT status : необязательное поле, определяет код возврата, допустимые значения: • permanent (301 — документ перемещен постоянно) • temporarily (302 — документ перемещен временно) • seeother (303 — смотрите другой) • gone (410 — убран) URL_LOCAL – локальная часть URL запрашиваемого документа. URL_REDIRECT – URL куда должен быть выполнен редирект.
Перенаправление с использованием регулярного выражения RedirectMatch301 (.*)\.html$ http://www.newdomain.com$1.php • К совпадениям в регулярном выражении можно обратиться через символ “$” и номеру совпадения. • Например $1 укажет на первое совпадение в шаблоне: (.*).
Перенаправление с использованием регулярного выражения RedirectMatch301 /oldcart.php(.*) http://www.newdomain.com/newcart.php$1 • Пример перенаправления с одного файла скрипта на другой. • Все данные, переданные методом GET сохранятся в строке адреса.
Директивы сложного перенаправления • Модуль mod_rewriteпредставляет собой основанный на правилах механизм (синтаксический анализатор с применением регулярных выражений), выполняющий URL преобразования на лету. • Перенаправление mod_rewriteосуществляются через заранее определённые правила.
Директивы сложного перенаправления • Директива RewriteCond — определяет условие, при котором происходит преобразование. RewriteCond определяет условия для какого-либо правила. • Перед директивой RewriteRule располагаются одна или несколько директив RewriteCond. • Следующее за ними правило преобразования используется только тогда, когда URI соответствует условиям этой директивы и также условиям этих дополнительных директив.
Обратная связь • Под обратной связью подразумевается использование частей сравниваемых URL для дальнейшего использования, т.е. как передачи параметров или для построения нового URL.
Префиксы и флаги Можно предварять строку шаблона префиксами, которые указывают, что выражение: • '!ШаблонУсловия' — не соответствует шаблону • '<ШаблонУсловия' — лексически меньше • '>ШаблонУсловия' — лексически больше • '=ШаблонУсловия'— лексически равно • '-d'— является ли каталогом • '-f'— является ли обычным файлом • '-s'— является ли обычным файлом с ненулевым размером • '-l' — является ли символической ссылкой
Пример использования RewriteCond%{REQUEST_FILENAME} -f[OR] RewriteCond%{REQUEST_URI} -d[OR] RewriteCond%{YEAR} =2015 • Проверяется, действительно ли существует запрашиваемый файл или действительно ли запрошенный URI является каталогом или действительно ли сейчас 2015-ый год.
Включение mod_rewrite RewriteEngineon | off # По умолчанию RewriteEngine off • Включение и выключение работы механизма преобразования.
Комбинирование условий в правилах RewriteEngineon RewriteCond %{REMOTE_HOST} ^mysubdomain1.* [OR] RewriteCond %{REMOTE_HOST} ^mysubdomain2.* [OR] RewriteCond %{REMOTE_HOST} ^mysubdomain3.* RewriteRule ^(.*)$ ^mysubdomain_public_html/ RewriteCond %{REMOTE_HOST} ^mysubdomain4.* RewriteRule ^(.*)$ ^mysubdomain4_public_html/ Для комбинирования условий могут быть использованы операторы ANDи OR.
Правило для главной страницы под специфику браузера RewriteEngineon RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^/$ /homepage.max.html [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]
Разные сайты в зависимости от браузера RewriteEngineon RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^(.*)$ /mozilla/ [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^(.*)$ /lynx/ [L] RewriteRule ^(.*)$ /default/ [L]
Директива RewriteRule RewriteRule Шаблон Подстановка [flag] # flag - необязательное поле указывающее дополнительные опции, разделяется запятыми и обрамляется квадратными скобками.
Пример 1 • Запрет посещений сайта поисковым роботом Google: RewriteEngineon RewriteCond%{USER_AGENT}GooglebotRewriteRule .*-[F] # Другой вариант возвращает вместо ошибки 403 (FORBIDDEN) ошибку 404 (NOT_FOUND) RewriteCond%{USER_AGENT}GooglebotRewriteRule .*-[R=404]
Пример 2 Запрет на посещение сайта в рабочее время: RewriteEngine on RewriteCond%{TIME_HOUR}%{TIME_MIN}>900 RewriteCond%{TIME_HOUR}%{TIME_MIN}<1800 RewriteRule.*-[F]
Пример 3 • Запрет на встраивание картинок из внешних страниц: RewriteEngineon RewriteBase/img/ RewriteCond%{HTTP_REFERER} !^$ RewriteRule\.(jpe?g|gif|png)$ - [F]
Пример 4 • В связи с неоднозначностью написания расширения файлов *.html и *.htm, некоторые пользователи могут написать расширение не так. Их можно перенаправить: RewriteEngineon RewriteBase / RewriteRule^(.*)\.htm$ .html [R=permanent]
Индексный файл • Индексный файл — это файл главной страницы папки на сайте, то есть тот файл, который загружается, когда посетитель обращается напрямую к какой-либо директории (в т.ч. и к корню сайта).
Индексные страницы • Когда пользователь заходит на хост, например, http://mati.ru,принято, что открывается индексный файл index.* при его отсутствии – либосодержимое каталога, либо ошибку 403 (Запрещено) если опция отключена – запрещен просмотр директорий.
Индексные страницы • В случае, если индексного файла в каталоге сервера нет и включена опция Indexes, будет выведен список файлов в данной директории. • Пример на http://mati.su • Включение опции: Options +Indexes
Индексные страницы # Запрет выдачи листинга каталогабез индексного файла Options-Indexes # При включённом индексе исключить некоторые файлы из листинга директории: IndexIgnore*.php* *.pl
Индексные страницы # Список индексных файлов задаётся в порядке приоритета DirectoryIndexindex.html index.shtml index.pl index.cgiindex.php # Можно указать любые имена файлов DirectoryIndexhtaccess.php/cgi-bin/index.pl
Обработка ошибок # содержание файла .htaccess: ErrorDocument404error/404.htm ErrorDocument403error/403.htm ErrorDocument400error/400.htm ErrorDocument500error/500.htm # в случае ошибки "Forbidden" показывается текстовое # сообщение, котороеобязательно должно начинаться с # кавычки, кавычка в сообщении не выводится: ErrorDocument403 "Sorry can't allow you access today, 403 Status Codes Apache"
Кодировка • В HTML: <metahttp-equiv="content-type"content="text/html; charset=Windows-1251"> • Через .htaccess: AddDefaultCharsetUTF-8
Управление доступом Order [Deny,Allow] | [Allow,Deny] # Поумолчанию Deny,Allow # Т.е. будут выполнены сначала# правила запрета доступа, а потом # разрешения
Разрешить доступ всем OrderAllow, DenyAllowfrom allDenyfrom 81.222.144.12 81.222.144.20 # Сначала выполнится правило # разрешения доступа всем, а потом – # запрета конкретным IP-адресам
Запретить доступ всем OrderDeny, AllowDenyfrom allAllowfrom 81.222.144.12 81.222.144.20 # Обратная ситуация: доступ# запрещён всем, кроме отдельных # IP-адресов
Запрет на доступ к отдельным файлам <Files "passwd.html"> Order Deny,Allow Denyfrom all Allowfrom 81.222.144.12 </Files>
Запрет на доступ к отдельным файлам # Можно использовать регулярное # выражение для указания группы # файлов <Files "\.(key)$"> Order Deny,Allow Denyfrom all Allowfrom 81.222.144.12 </Files>
Паролирование директорий AuthName"Achtung! Uwaga! Attention! Protected area!" AuthTypeBasic AuthUserFile/home/pavel/.authfile requirevalid-user
Генерирование файла с паролями • Параметр AuthUserFileуказывает имя файла с паролями для аутентификации пользователей (пароли в этом файле будут шифрованными). Путь к файлу с паролями задается относительно корня веб-сервера.
Генерирование файла с паролями [pavel@mati.su]~# htpasswdUsage:htpasswd[-cmdps] passwordfile usernamehtpasswd -b[cmdps] passwordfile username password -c Create a new file.
Генерирование файла с паролями [pavel@mati.su]~ # htpasswd -c authfile test1New password:Re-type new passwordAdding password for user test1 Генерирование пароля для пользователя test1 в файл “authfile”.
Полезные ссылки • http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html • http://beget.ru/art_htaccess • http://beget.ru/art10
Лабораторная работа • Создать перенаправление на постоянной основе с использованием регулярного выражения со всех файлов index.php5, index.php4, index.php3 на index.php • Создать собственные страницы 403 (запрещено), 404 (не найдено) и 401 (требуется авторизация). • Создать сложное перенаправление у URL следующего вида: http://yoursite.ru/2014/04/01/newsна http://yoursite.ru/index.php?year=2014&month=04&day=01&article=news • Создать перенаправление для всех файлов вида picN.jpg на picture.jpg (должен реально существовать), где N – число от 0 до 999. Если запрашиваемый файл действительно существует, запретить к нему доступ.
Лабораторная работа • Создать перенаправление для IP-адреса. • Если IP-адрес принадлежит локальной сети (начинается на 192.168.), то перенаправить пользователя на страницу local.html • Если иное, то на страницу all.html • Создать директорию на сервере и разрешить доступ к ней только из локальной сетис маской 255.255.0.0. • Если доступ осуществляется из локальной сети, запрашивать пароль. • Разрешить в данной директории индексы, но запретить отображение всех файлов с расширениями *.php, *.html, *.htm