Як правильно написати або зконфігурувати htaccess
Створюю і просуваю комерційні сайти та інтернет-магазини з 2008 року. 22-04-2013, 12:00 4 361 0Web - сервер Apache - це потужний і багатофункціональний програмний продукт із різноманітними можливостями. Apache допускає конфігурування на рівні окремих каталогів за допомогою файлів "htaccess".
htaccess (із крапкою на початку імені) - це конфігураційний файл, який дає можливість налаштовувати роботу сервера: установлювати права доступу до файлів в каталогах, міняти назви індексних файлів, самостійно обробляти коди відповідей протоколу HTTP, модифікувати адреси запитаних сторінок.
- дивитись приклади переадресації
Файл .htaccess може бути розміщений в будь-якому каталозі !
Директиви цього файлу діють на всі файли в поточному каталозі і у всіх його підкаталогах (якщо ці директиви не перевизначені директивами файлів .htaccess у вкладених каталогах).
Зміни, що вносяться у файли .htaccess, набувають чинності негайно і не вимагають перезавантаження сервера на відміну від змін, що вносяться в головний конфігураційний файл httpd.conf.
Зразок .htaccess:
AddHandler server-parsed .html .htm
AddType text/html .html
Options Indexes FollowSymLinks Includes
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|php|js|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
php_flag engine off
Options All -Indexes
AddOutputFilterByType DEFLATE text/html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/404.html
ErrorDocument 403 /error/404.html
ErrorDocument 401 /error/404.html
DirectoryIndex index.html
Команди htaccess:
Вказуємо головну сторінку в каталозі:
При запиті каталогу без вказівки імені файлу спочатку буде здійснений пошук сторінки з ім'ям index.php. Якщо сторінки з таким ім'ям немає в каталозі, то аналогічні операції будуть зроблені з файлом index.shtml і т.д. до кінця списку, поки не буде знайдена й відкрита відповідна сторінка.
DirectoryIndex index.php index.shtml index.html
Заборона на відображення вмісту каталогу при відсутності індексного файлу
Options –Indexes
3. Прискорення часу завантаження за рахунок стиснення файлів
Стискати можна файли будь-якого типу. Наприклад, для стиснення HTML-файлів додайте код:
AddOutputFilterByType DEFLATE text/html
Для стиснення текстових файлів використовуйте:
AddOutputFilterByType DEFLATE text/plain
Ви також можете стиснути jаvascript або включити стиснення для інших різних типів файлів командами:
AddOutputFilterByType DEFLATE application/jаvascript
AddOutputFilterByType DEFLATE application/rss+xml
Крім того, ви можете стиснути всі ваші jаvascript, HTML і CSS файли за допомогою GZIP. Для цього використовуйте наступний код:
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text\.*
mod_gzip_item_include mime ^application/x-jаvascript.*
mod_gzip_item_exclude mime ^image\.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
Кешування файлів, для прискорення завантаження браузером:
Ви можете додати більше типів файлів (або видалити деякі з них) в перечісленних в даному прикладі файлів. Ви також можете вказати час збереження файлів в кеші (у секундах) за допомогою змінної max-age.
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
2592000 - це 1 місяць, 604800 - це тиждень, 43200 - це день.
Забороняємо кешувати:
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
Обробка кодів помилок:
401 помилка - Можливі причини події:
- Ви помилилися в синтаксисі при введенні логіна-пароля
- Ви не маєте дозволу для заходу з даного URL
- Проводитися технічні роботи і даний розділ тимчасово закритий для загального доступу. (Unautorized)
403 помилка - Запит відхилений, оскільки сервер не хоче, не має можливості відповісти клієнту. Можливі причини цього:
- Якщо ви очікуєте отримати лістинг каталогу, але виводиться ця помилка, ймовірно, для даної директорії видача лістингу заборонена
- Доступ до даного каталогу і підкаталогам по протоколу http закритий. (Forbidden)
404 помилка - Найбільш часті причини показу цієї сторінки:
- Сервер не знайшов сторінок - Request-URI не вірний.
- Документ (каталог, файл) запитуваний вами відсутня, або тимчасово недоступний.
- Можливо, була допущена помилка при створенні посилання, можливо перегляд запитуваної вами каталогу заборонений в конфігурації сервера, або документ був переміщений або перейменований. (Not Found).
500 помилка - Помилка 500 - apache не може виконати даний запит клієнта. Можливі причини:
- Критична помилка в роботі програмного забезпечення, наприклад - вашому новому скрипті.
- Внутрішня помилка - у файлах .htaccess або в конфігураційних файлах каталогу - conf
- додаток перезапускається
- сервер перевантажений
- Сервером дана команда на вимикання (Internal Server Error).
Створіть свої власні сторінки з помилками:
ErrorDocument 404 https://rullan.in.ua/error/404.html
ErrorDocument 500 https://rullan.in.ua/error/500.html
ErrorDocument 403 https://rullan.in.ua/error/403.html
ErrorDocument 401 https://rullan.in.ua/error/401.html
також можна вказати в htaccess сам текст, що буде відображатись на сторінці помилки:
ErrorDocument 403 "Sorry can't allow you access today, 403 Status Codes Apache"
Виконувати код PHP в файлах HTML
Перший рядок видаляє оброблювач файлів з розширеннями html і htm, а другий рядок повідомляє сервер про необхідність використовувати для файлів з розширеннями htm і html оброблювач PHP
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
Щоб задати кодування сторінок:
AddDefaultCharset Windows-1251
Щоб перекодувувати сторінки:
CharsetSourceEnc WINDOWS-1251
Перенаправлення:
Глобальне перенаправлення на нову адресу
Redirect / http://www.site.ru/
Перенаправлення при зверненні до певного файлу
Redirect / books / index.php http://www.site.ru/newbooks/
Перенаправлення при зверненні до будь-якої сторінки каталогу
RedirectMatch / books /. * Http://www.site.ru/newbooks/
Перенаправлення при зверненні до будь-яких сторінок сайту
RedirectMatch /. * Http://www.site.ru/
Заборона виконувати файли з переліченими розширеннями:
<FilesMatch ".([Pp][Hh][Pp]|[Cc][Gg][Ii]|[Pp][Ll]|[Ph][Hh][Tt][Mm][Ll]).?">
Order allow,deny
Deny from all
</FilesMatch>
Заборона доступу до файлів з браузера.
1- При використанні такої директиви буде заборонений доступ з браузера до всіх файлів і каталогів поточного каталогу.
Deny from all
2- Заборона доступу до певного файлу:
<Files config.php> Deny from all </ Files>
3- Заборона доступу до файлів розширення inc:
<Files "*.inc"> Deny from all </ Files>
4- Заборона доступу до файлів з декількома типами розширень:
<Files ~ ".(inc|conf|cfg)$"> Deny from all </ Files>
5- Заборонити доступ з певного IP-адреси
Deny from 195.135.232.70
6- Дозволити доступ тільки з певного 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.
Багато цікавого можна знайти про .htaccess
на москальському сайті - http://www.beget.ru/art9#access
і на Хабрахарі - http://habrahabr.ru/post/165701/
Нехай щастить!