Набираючи адресу в рядку браузера, ви отримуєте на свій комп’ютер файли, які відображає браузер. Управління тим, які файли і як вам показувати (пересилати) здійснює веб-сервер. Найбільш популярних серверів два: IIS і Apache.

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

Це файл гнучкого налаштування веб-сервера Апач. «Гнучкий» означає, що як тільки ви змінили щось в цьому файлі, зміни тут же вступають в силу. За допомогою нього можна перевизначити багато директиви з файлу httpd.conf (цей файл є головним конфігураційним файлом сервера Апач і його дії поширюються на всіх користувачів даної копії Апача). У випадках, коли у вас немає доступу до файлу налаштування Апача (той же віртуальний хостинг), вам допоможе саме цей файл.

Цей файл доступний веб-користувачу з браузера. Якщо файл .htaccess розташований в кореневій директорії сервера, то його дії поширюється на весь сервер, крім тих папок, де знаходиться інший файл .htaccess (і крім всіх папок «нижче» цієї папки з другим .htaccess).

Приклад:
Структура ваших директорій на сервері така:

|-user
|
|—user1
|
|—user2
|-data
|
|—data1
|
|—data2

Директорії user1 і user2 будуть вкладеними по відношенню до директорії user. Якщо ми помістимо в папку www файл .htaccess, то її дія буде автоматично поширюватися і на директорії user1 і user2.

В директорію data поміщаємо інший файл .htaccess, по-порівнянні з тим, що знаходиться в директорії user. І для директорій data1 і data2 буде діяти файл .htacсess, що знаходиться в data.

Тепер, в директорію user2 ми поміщаємо ще один файл .htaccess, який відрізняється від того, що знаходиться в директорії 2ма рівнями вище (це директорія user). У підсумку, налаштування для директорії user2 будуть визначатися тільки тим файлом .htaccess, який знаходиться в цій директорії.

Так як найчастіше Апач налаштований так, що завжди шукає файл в директорії, то .htaccess допоможе вам швидко і без зупинки сервера зробити його перенастроювання.

Синтаксис .htaccess

Ось обов’язкової синтаксис, недотримання якого призводить до помилок сервера:

  • шляхи до файлів (директоріях) зазначаються від кореня сервера. Приклад: /opt/home/www.astanafoto.com/htdocs/config/.htpasswords;
  • домени із зазначенням протоколу.

Приклад: Redirect / http://www.site.ru

Файл має назву саме «точка» htaccess повинен бути записаним в UNIX-форматі. Для оболонки FAR, досягається F4 (редагування файлу), Shift+F2 (вибрати «зберегти як UNIX-текст«).

Як заборонити веб-відвідувачам читати файли в директорії?

Заборона на усі файли:

deny from all

Де all означає «все».

Дозволити доступ з певного ip:

order allow, deny
deny from all
allow from «ваш ip»

В даному випадку, «ip» означає конкретну адресу. Наприклад:

order allow, deny
deny from all
allow from 192.126.12.199

Заборонити доступ з певного ip:

order allow, deny
deny from all
deny from «ваш ip»

Використання «ваш ip» аналогічно для прикладу вище.

Заборона на групи файлів по масці:

order allow,deny
deny from all

Визначає доступ до файлу по його розширенню.

Наприклад заборона на доступ до файлів з розширенням «inc» для веб-відвідувачів:

order allow,deny
deny from all

У даному прикладі сам веб-сервер Апач може звертатися до файлів з таким розширенням.

Заборона на конкретний файл:

Можна поставити заборону на конкретний файл по його назві та розширення.

order allow,deny
deny from all

В даному прикладі стоїть заборона на звернення до файлу config.inc.php.

Пароль на директорію:

AuthName «Private zone»
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd
require valid-user

Значення AuthName буде виводитися для відвідувача і може використовуватися для пояснення запиту авторизації. Значення AuthUserFile вказує на місце, де зберігається файл з паролями доступу до даної директорії. Цей файл створюється спеціальною утилітою htpasswd.exe.

Наприклад в директорії, яку захищаємо паролем створюємо такий .htaccess:

AuthName «For Registered Users Only»
AuthType Basic
AuthUserFile /pub/site.ua/.htpasswd
require valid-user

У цьому прикладі, відвідувач при запиті директорії, буде читати фразу «For Registered Users Only», файл з паролями для доступу повинен лежати в директорії /pub/site.ru/ та називатися .htapasswd. Директорія вказується від кореня сервера, якщо ви неправильно задасте директорію, то Апач не зможе прочитати файл .htpasswd і ніхто не отримає доступу до даної директорії.

Пароль на 1 файл:

Аналогічно паролювання директорії повністю, можна ставити пароль на 1 файл.

Приклад установки пароля на файл private.zip:

AuthName «Users zone»
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd

Пароль на групу файлів:

Аналогічно, використовуючи , можна ставити паролі файлів по масці.

Приклад установки пароля на доступ до файлу з розширенням «sql«:

AuthName «Users zone»
AuthType Basic
AuthUserFile /pub/home/твой_логин/.htpasswd

Перевірка прав доступу

Завдання: є каталог a1 і в ньому два вкладених каталогу a2, a3, введено 2 рівня користувачів. 1 група має доступ тільки до a1 і a2, 2-я до всіх трьох каталогах.

Необхідно проводити аутентифікацію тільки 1 раз — при доступі до a1, але при цьому дотримуватися права на доступ до а2 і а3.

Логін і пароль запитуються лише при вході на а1 — якщо у юзверя є доступ на а2 пароль вже не запитується. Якщо на а3 доступу немає, вилетить табличка «введіть пароль«.

  • www.site.ru/a1;
  • www.site.ru/a1/а2;
  • www.site.ru/a1/a3.

a1 — загальний і разом з тим закритий. а2 і а3 тільки для окремих особистостей.

файл .htaccess для каталогу а1:

AuthName «Input password»
AuthType Basic
AuthUserFile «/pub/home/login/htdocs/clousearea/.htpasswd»
require valid-user

файл .htaccess для каталогу а2:

AuthName «Input password»
AuthType Basic
AuthUserFile «/pub/home/login/htdocs/clousearea/.htpasswd»
require user юзвер1 юзвер2 юзвер3

файл .htaccess для каталогу а3:

AuthName «Input password»
AuthType Basic
AuthUserFile «/pub/home/абв/htdocs/clousearea/.htpasswd»
require user юзвер1 юзвер4 юзвер5

Як зробити перенаправлення (редирект) відвідувача?

Редірект на інший url:

Що б зробити перенаправлення відвідувача на сайт http://site.ru в .htaccess Redirect / http://www.site.ru

Показ різних сторінок, в залежності від адреси IP відвідувача:

SetEnvIf REMOTE_ADDR REDIR=»перенаправлення»
RewriteCond %{REDIR} перенаправлення
RewriteRule ^/$ /another_page.html

Наприклад, перенаправлення відвідувачів з ip адресою 192.12.131.1 на сторінку about_my_sity.html:

SetEnvIf REMOTE_ADDR 192.12.131.1 REDIR=»перенаправлення»
RewriteCond %{REDIR} перенаправлення
RewriteRule ^/$ /about_my_sity.html

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

Це вже для всіх мережевих вірусів і сканерів. Тепер будь-який запит з адресою /_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

Як зробити стартовою іншу сторінку?

Що б змінити сторінку, яка буде показуватися при зверненні до директорії, пишемо: DirectoryIndex «потрібна сторінка»

Можна вказувати кілька сторінок.

DirectoryIndex index.shtml index.php index.php3 index.html index.htm

Як змусити Апач виконувати в html-документах php код?

Іноді буває корисно «обдурити» відвідувача, видаючи йому свої php-скрипти або інші файли, html файли. Реально використовується для індексації пошуковою системою Rambler php-скриптів. Деякі роблю дрібні фішки, на зразок того, що дають фалам розширення збігаються з якими «знаковими» іменами.

Наприклад, на сайті www.osg.ru використовуються файли з розширенням osg: index.osg,script.osg і т. п.

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

При великій відвідуваності сервера може викликати гальма. Запитуйте у адміна.

Як самому обробляти помилки Апача?

Найбільш цікаві та корисні помилки Апача це: 403-404, 500.

  • 403 — користувач не пройшов аутентифікацію, заборона на доступ (Forbided);
  • 404 — запитуваний документ (файл, директорія) не знайдений;
  • 500 — внутрішня помилка сервера (наприклад, помилка в синтаксисі файлу .htaccess).

Для того, що б користувачеві при цих помилках були показані ваші власні повідомлення про помилки .htaccess пишемо:

ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

При цьому при виникненні 404 помилки користувачеві файл завантажиться errors/403.html.

Як поставити заборону на відображення вмісту директорії при відсутності індексного файлу?

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

Options -Indexes

Можна вказати кодування на всі файли, в якій за замовчуванням отримує документи браузер?

На зорі інтернету і зародження браузерів, часто була ситуація, що браузер не міг автоматично визначити, в якій з російських кодувань написаний документ і в браузер видавалася якась каша. Для уникнення цього зазначаємо, що всі віддають сторінки будуть мати кодування windows-1251:

AddDefaultCharset windows-1251

Можна вказати кодування на завантаження?

При завантаженні відвідувачем файлу на сервер, можлива перекодування його вказуємо, що всі отримані файли будуть мати кодування windows-1251:

CharsetSourceEnc windows-1251