- FAQ
SSL-сертифікати
Платежі
Електронна пошта
FTP
Бази даних
Резервні копії
Сайти
Налаштування у файлі .htaccess
Налаштування файлу .htaccess розповсюджуються на файли у тій директорії каталогу, у якій він розміщений, і на всі директорії, які знаходяться на рівень чи на кілька рівнів нижче. Якщо цей файл буде розміщено всередині вкладеної папки, то його налаштування перевизначать налаштування файлу на вищому рівні.
У файлі .htaccess можна задати багато різних параметрів і рішень. Цей файл можна використовувати для:
- - створення авторизації та аутентифікації (тобто, обмеження доступу до файлів чи папок);
- - встановлення перенаправлень (наприклад, з безкоштовного домену на платний);
- - встановлення власної сторінки помилки (замість сторінки помилки спільної для всіх сайтів, розміщених на хостингу);
- - для зміни складних, довгих URL на короткі і такі, які легко запамʼятати;
- - контроля кешування;
- - налаштування інших функцій.
Для того, щоб краще розібратись в .htaccess, розглянемо, наприклад, файл, який створюється за замовчуванням для Joomla:
Options +Indexes
- якщо ввімкнена ця опція, то при зверненні до папки, в якій немає файлу index.html, буде відображено лістинг - список файлів, які знаходяться в папці. З допомогою цієї команди можна також виключити зі списку окремі файли, наприклад:IndexIgnore, .htaccess, .ftpquota, .DS_Store, robots.txt.
- Якщо ввімкнена опція
IndexIgnore
, то всі файли будуть проігноровані і список файлів буде пустий. Options +FollowSymlinks
- ця опція дозволяє переходити за посиланнями, але якщо при її активації на сторінці ви побачите помилку, то швидше за все вона вже використовується в налаштуваннях сервера, і в даному файлі .htaccess її рекомендовано закоментувати або видалити.Options -Indexes
- відключає відображення лістингу при відсутності index.html.RewriteEngine On
- включає механізм перенаправлення в модулі mod_rewrite.
Далі йдуть налаштування безпеки:
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
Рядок параметрів закодований у Base64, містить тег <script>
і флаг [NC]
в кінці другого рядка вказує, що перевірка відбувається без врахування реєстру. Рядок параметрів запиту містить операцію встановлення змінної PHP GLOBALS
через URL, а також містить операцію встановлення змінної РНР $_REQUEST
через URL.
У випадку виконання однієї з цих умов виконується правило:
RewriteRule .* index.php [F]
Флаг [F] (у перекладі від "forbidden" — заборонено) у цьому правилі дає інструкцію серверу негайно відправити відповідь з кодом помилки 403. При цьому буде здійснене перенаправлення на головну сторінку сайту index.php, як вказано в команді.
Далі починається блок SEF-оптимизації.
Перший рядок встановлює змінну оточення HTTP_AUTHORIZATION переданими в запиті параметрами HTTP-авторизації.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Далі йдуть рядки:
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Розглянемо по порядку. Перший рядок перевіряє відсутність index.php
в рядку запиту:
RewriteCond %{REQUEST_URI} !^/index\.php
Наступний рядок перевіряє, чи запит вказує на існуючий файл:
RewriteCond %{REQUEST_FILENAME} !-f
Наступний рядок перевіряє, чи запит вказує на існуючу директорію:
RewriteCond %{REQUEST_FILENAME} !-d
Таким чином, правило не буде виконуватись, якщо в запиті було вказано неіснуючий файл або директорія.
Якщо вищезгадані умови виконані, спрцьовує правило в останньому рядку:
RewriteRule .* index.php [L]
Флаг [L] означає, що це останнє правило. Це правило скеровує запит до скрипту index.php
. Тобто, незалежно від того, що передано в URL, якщо це не файл і не папка, буде виконаний скрипт index.php
. При цьому рядок вихідного запиту буде доступний через суперглобальний масив $_SERVER
.
Наприклад, запит: http:/yoursite.com/news/2015/07/01?prm1=556 фактично виконає: http:/yoursite.com/index.php
, але в скрипті з $_SERVER
ми можемо отримати наступне:
$_SERVER['REQUEST_URI'] --> 'news/2015/07/01?prm1=556'
$_SERVER['QUERY_STRING'] --> 'prm1=556'
Увага: на хостингу CBA.pl заблоковано використання директив php_flag і php_value. Якщо вони прописані в файлі .htaccess, їх потрібно видалити або закоментувати.