Оптимізація веб-сайту через .htaccess
У RegisTeam ми використовуємо .htaccess для оптимізації сайтів, покращуючи їх продуктивність та безпеку. Наша команда налаштовує файли .htaccess для прискорення завантаження сторінок, захисту від атак та покращення SEO. Зв’яжіться з нами для консультації та детальної інформації через нашу сторінку контактів.
Що таке файл .htaccess і модуль mod_rewrite?
Файл .htaccess (Hypertext Access) є конфігураційним файлом, що використовується веб-серверами Apache для управління поведінкою веб-сайтів та веб-сторінок. Цей файл розміщується в кореневому каталозі веб-сайту і надає адміністраторам можливість тонкого настроювання різних аспектів роботи сервера без необхідності прямого втручання в основну конфігурацію сервера. Файл .htaccess може містити директиви для керування перенаправленнями, доступом до файлів, налаштуваннями безпеки, кешуванням та багатьма іншими аспектами роботи веб-сервера.
Редирект – це процес перенаправлення користувача з однієї сторінки сайту на іншу (з одного URL на інший). Редиректи можуть спрямовувати відвідувачів як на внутрішні сторінки сайту, так і на сторінки інших сайтів.
Основні можливості файлу .htaccess
Однією з ключових функцій файлу .htaccess є можливість керування перенаправленнями та URL-адресами за допомогою модуля mod_rewrite. Цей модуль дозволяє створювати складні правила для переписування URL-адрес, що може суттєво покращити структуру та читаність URL, а також допомогти у SEO-оптимізації сайту. Наприклад, за допомогою mod_rewrite можна налаштувати перенаправлення з http://example.com/page на http://example.com/new-page, що дозволяє уникнути помилок 404 і зберегти позиції сторінки в пошукових системах.
Mod_rewrite: приклади та застосування
Mod_rewrite також використовується для створення дружніх URL, які легко сприймаються користувачами та пошуковими системами. Наприклад, замість URL типу «http://example.com/index.php?page=products&category=5» можна створити більш чисту та зрозумілу URL типу «http://example.com/products/category/5». Для цього у файл .htaccess додаються спеціальні правила, які вказують серверу, як обробляти запити та переписувати URL-адресу. Ці правила можуть бути досить гнучкими та потужними, дозволяючи адміністраторам веб-сайтів реалізовувати найрізноманітніші сценарії перенаправлень та обробки запитів.
Файл httpd.conf дозволяє налаштувати роботу сервера. Після внесення необхідних змін до цього файлу можна запускати сервер.
Файл .htaccess та модуль mod_rewrite є потужними інструментами в арсеналі адміністратора веб-сайту, надаючи можливість гнучкого керування сервером та оптимізації його роботи. З їх допомогою можна поліпшити безпеку сайту, підвищити його продуктивність і створити більш зручну і логічну структуру URL, що в свою чергу позитивно позначиться на досвіді користувача і SEO. Розуміння та грамотне використання цих інструментів є важливими аспектами успішного адміністрування та розвитку веб-ресурсів.
Доступ до файлу httpd.conf для звичайних користувачів обмежений, а .htaccess дозволяє змінювати деякі директиви з httpd.conf. Дія директив з .htaccess поширюється на весь каталог, де він розташований. Тому, якщо розмістити його в кореневому каталозі, зміни будуть застосовуватись до всього сайту. Це зручно для вебмайстрів, які хочуть вносити зміни до роботи сайту без участі системних адміністраторів. Якщо файл .htaccess знаходиться в підкаталозі, його директиви будуть застосовуватися тільки до цього підкаталогу та його підкаталогів. Пріоритетними вважаються команди, прописані в .htaccess, що у конкретному каталозі.
Основні оператори для роботи з файлом .htaccess
Нижче наведено основні оператори для файлу .htaccess з їх синтаксисом та описом.
Authentication и Authorization
1. AuthType
– Опис: Визначає тип автентифікації, що використовується для доступу до захищеного ресурсу.
– Синтаксис: AuthType Basic
2. AuthName
– Опис: Встановлює ім’я області (realm) автентифікації, яке відображається користувачеві.
– Синтаксис: AuthName “Restricted Area”
3. AuthUserFile
– Опис: Вказує шлях до файлу, що містить імена користувачів та паролі.
– Синтаксис: AuthUserFile /path/to/.htpasswd
4. AuthGroupFile
– Опис: Вказує шлях до файлу, який містить інформацію про групи користувачів.
– Синтаксис: AuthGroupFile /path/to/.htgroup
5. Require
– Опис: Визначає вимоги до користувача для доступу до ресурсу.
– Синтаксис: Require valid-user
Редиректи та перезаписи URL
1. Redirect
– Опис: Перенаправляє запити з одного URL на інший.
– Синтаксис: Redirect [status] /old-url /new-url
2. RedirectMatch
– Опис: Перенаправляє запити, що відповідають регулярному виразу.
– Синтаксис: RedirectMatch [status] regex-url target-url
3. RewriteEngine
– Опис: Вмикає або вимикає механізм перезапису URL.
– Синтаксис: RewriteEngine On
4. RewriteCond
– Опис: Визначає умову, за якої застосовується правило перезапису.
– Синтаксис: RewriteCond test-string condition-pattern
5. RewriteRule
– Опис: Визначає правило перезапису URL.
– Синтаксис: RewriteRule pattern target [flags]
Налаштування директорій
1. DirectoryIndex
– Опис: Визначає файл, який буде використовуватися як індексний в директорії.
– Синтаксис: DirectoryIndex filename
2. Options
– Опис: Налаштовує різні параметри для директорії.
– Синтаксис: Options option1 option2
3. AllowOverride
– Опис: Вказує, які директиви можуть бути перевизначені в .htaccess.
– Синтаксис: AllowOverride directive
Управління доступом
1. Order
– Опис: Визначає порядок застосування директив Allow и Deny.
– Синтаксис: Order allow,deny
2. Allow
– Опис: Дозволяє доступ із зазначених джерел.
– Синтаксис: Allow from address
3. Deny
– Опис: Забороняє доступ із зазначених джерел.
– Синтаксис: Deny from address
Налаштування кешування
1. ExpiresActive
– Опис: Вмикає або вимикає механізм керування закінченням терміну дії вмісту.
– Синтаксис: ExpiresActive On
2. ExpiresByType
– Опис: Встановлює термін дії вмісту на основі MIME-типу.
– Синтаксис: ExpiresByType type value
3. Header
– Опис: Додає або змінює заголовки HTTP.
– Синтаксис: Header set name value
Налаштування помилок
1. ErrorDocument
– Опис: Визначає сторінки помилок користувача.
– Синтаксис: ErrorDocument error-code document
Управління MIME-типами
1. AddType
– Опис: Призначає MIME-типи файлів із певними розширеннями.
– Синтаксис: AddType mime-type extension
2. AddHandler
– Опис: Призначає обробник для файлів з певними розширеннями.
– Синтаксис: AddHandler handler extension
Налаштування стиснення
1. AddOutputFilterByType
– Опис: Застосовує фільтр до вмісту на основі MIME-типу.
– Синтаксис: AddOutputFilterByType filter mime-type
2. SetOutputFilter
– Опис: Встановлює фільтр для вмісту.
– Синтаксис: SetOutputFilter filter
Змінні оточення
1. SetEnv
– Опис: Встановлює значення змінного оточення.
– Синтаксис: SetEnv variable value
2. UnsetEnv
– Опис: Видалення значення змінного оточення.
– Синтаксис: UnsetEnv variable
3. PassEnv
– Опис: Передає змінні оточення зовнішнім програмам.
– Синтаксис: PassEnv variable
Налаштування заголовків
1. Header
– Опис: Керує HTTP-заголовками.
– Синтаксис: Header set|append|add|unset name value
Настройка заголовков
1. Include
– Опис: Включає вміст іншого конфігураційного файлу.
– Синтаксис: Include file
2. AddDefaultCharset
– Опис: Встановлює кодування за замовчуванням для тексту.
– Синтаксис: AddDefaultCharset charset
3. FileETag
– Опис: Налаштовує ETag для файлів.
– Синтаксис: FileETag component
Контроль доступу до IP
1. Deny from
– Опис: Забороняє доступ із зазначених IP-адрес.
– Синтаксис: Deny from address
2. Allow from
– Опис: Дозволяє доступ із зазначених IP-адрес.
– Синтаксис: Allow from address
Цей список включає основні оператори, що використовуються в .htaccess, їх синтаксис та приклади. Ці оператори допоможуть ефективно керувати конфігурацією вашого веб-сервера Apache.
Символи та їх значення
1) . (крапка)
– Опис: Відповідає будь-якому одиночному символу, крім нового рядка.
– Приклад: a.b відповідає aab, acb, a1b і т.д.
2) $
– Опис: Обмеження праворуч; відповідає кінцю рядка.
– Приклад: abc$ відповідає рядку, що закінчується на abc.
3) ^
– Опис: Обмеження ліворуч; відповідає початку рядка.
– Приклад: ^abc відповідає рядку, що починається з abc.
4) *
– Опис: Відповідає попередньому символу (або групі символів) 0 або більше разів.
– Приклад: ab*c відповідає ac, abc, abbc і т.д.
5) +
– Опис: Відповідає попередньому символу (або групі символів) 1 або більше разів.
– Приклад: ab+c відповідає abc, abbc, abbbc і т.д.
6) []
– Опис: Діапазон значень; відповідає кожному символу всередині дужок.
– Приклад: [a-z] відповідає будь-якій літері від a до z.
7) \
– Опис: Екранування; використовується позначення спеціальних символів як звичайних.
– Приклад: \. відповідає точці, відповідає зворотній косій межі.
8) ()
– Опис: Група; використовується для групування символів та створення підмасок.
– Приклад: (abc)+ відповідає abc, abcabc, abcabcabc і т.д.
9) [0-9]
– Опис: Замінює будь-яку цифру від 0 до 9.
– Приклад: [0-9] відповідає будь-якій цифрі.
10) [a-z]
– Опис: Замінює будь-яку літеру з латинського алфавіту.
– Приклад: [a-z] відповідає будь-якій маленькій літері.
11) #
– Опис: Коментар; все, що розташоване після символу # вважається коментарем.
Приклади використання
1. Приклад регулярного виразу URL перезапису:
*Опис: Перенаправляє URL products/123 на product.php?id=123.
Тут:
- ^ вказує на початок рядка.
- products/ – фіксована частина URL.
- ([0-9]+) – одна або більше цифр, захоплених як група (змінна).
- $ вказує на кінець рядка.
- $1 — посилання на першу групу (цифри).
2. Приклад використання екранування:
*Опис: Перенаправляє URL page.html на page.php.
Тут:
- \. екранує крапку, щоб вона розглядалася як символ крапки, а не будь-який символ.
3. Приклад з діапазонами та групами:
*Опис: Перенаправляє URL category/123 на category.php?name=category&id=123.
Тут:
- ^ вказує на початок рядка.
- ([a-z]+) – одна або більше малих літер, захоплених як перша група.
- / – Фіксований символ слеша.
- ([0-9]+) – одна або більше цифр, захоплених як друга група.
- $ вказує на кінець рядка.
- $1 і $2 — посилання на захоплені групи (літери та цифри).
Ці символи та оператори допоможуть вам ефективно використовувати регулярні вирази для керування URL та іншими аспектами конфігурації веб-сервера у файлі .htaccess.
Основне налаштування для файлу .htaccess
Скопіюйте цей код, замініть primer на ваше доменне ім’я та збережіть у файлі конфігурації.
Options +FollowSymLinks
RewriteEngine On
# Перенаправлення з домену primer.au
RewriteCond %{HTTP_HOST} ^primer\.au$ [NC]
RewriteRule ^(.*)$ http://primer.au/$1 [R=301,L]
# Перенаправлення з index.php на головну сторінку
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP
RewriteRule ^index\.php$ http://as-pushkin.au/ [R=301,L]
# Видалення завершального слеша в URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
ПРАВИЛА ВИКОРИСТАННЯ ФАЙЛУ .HTACCESS
1. Створюйте резервні копії: Перш ніж вносити зміни або розпочинати роботу з файлом .htaccess, обов’язково створіть резервну копію. Це дозволить повернути вихідні налаштування у разі потреби.
2. Вказівка шляху до файлів: Шляхи до файлів мають бути вказані від кореня. Приклад:
3. Прописка доменів: Домени вказуються з протоколом. Приклад:
4. Ім’я файлу: Не забувайте про точку перед назвою файлу .htaccess (це частина імені файлу).
5. Коментарі: Коментарі у файлі прописуються за допомогою символу #. Використовуйте їх, щоб інші оптимізатори чи розробники розуміли призначення тих чи інших директив. Приклад:
.htaccess для SEO: стандартні методи використання
Слід пам’ятати, що налаштування лише файлу .htaccess не завершує оптимізацію вашого сайту. Цей файл є лише інструментом, що використовується оптимізатором. Для повноцінного технічного функціонування сайту потрібно провести повний аудит.
Крім того, налаштування можуть відрізнятися в залежності від движка сайту та сервера. Наприклад, одне і те ж правило переадресації може працювати на одному сервері, але не працювати на іншому через відмінності в їх налаштуваннях. У статті наведено приклади налаштувань .htaccess, деякі з яких можуть не спрацювати у вашому конкретному випадку. Тому важливо підібрати власний робочий варіант і для зручності деякі способи представлені у двох варіантах.
Вибір основного дзеркала
Перш ніж приступати до просування сайту, потрібно вирішити, яку саме адресу ви оптимізуватимете: з WWW (http://www.primer.ua) або без WWW (http://primer.ua). Без цього кроку пошукові системи можуть самостійно вибрати основне дзеркало сайту, що призведе до появи дубльованих сторінок в індексі.
Основне дзеркало сайту – це обране повне доменне ім’я, яке вважається головним, тому що саме воно відображається у результатах пошукової видачі.
Якщо ви не впевнені в правильності налаштування основного дзеркала або ще не налаштовували його, рекомендуємо виконати такі дії:
- Перейдіть у пошукову систему.
- Введіть адресу вашого веб-сайту.
- Проаналізуйте результати видачі, щоб визначити, яке дзеркало сайту було надано.
Результат, що відображається в нижньому рядку, вкаже на основне дзеркало сайту, яке пошукова система призначила за замовчуванням.
Іноді сайт може відкриватися як за адресою http://www.primer.ua, так і за адресою http://primer.ua, що створює проблему двох дублів для головної сторінки. Це свідчить про дублювання контенту, яке стосується не лише головної сторінки, а й усіх вкладених категорій та підкатегорій (URL-сторінок сайту). Таке дублювання може уповільнити індексацію проекту, особливо якщо сайт багатосторінковий. Додатково, природні посилання розміщуватимуться по-різному, що зменшить їх ефективність. Рішення одне – позбутися другорядного дзеркала, використовуючи редирект у файлі .htaccess.
Отже, приступимо до найпростішого завдання з файлом .htaccess:
Визначте, як ви хочете, щоб користувачі та пошукові системи бачили ваш проект: з WWW або без WWW.
При виборі домену для просування сайту, чи то з WWW, чи без нього, важливо пам'ятати, що жоден із цих варіантів не має пріоритетів у SEO! Існує думка, що домен без WWW сприймається пошуковими ботами як домен другого рівня, що нібито найкраще для SEO. Однак, насправді, домен з WWW, хоч і є доменом третього рівня, ніяк не впливає на SEO оптимізацію сайту. Таким чином, вебмайстер або власник сайту може вибрати основний домен на власний розсуд. Єдиною негласною перевагою є те, що домен без WWW коротший на три символи. Якщо сайт вже має історію оптимізації з використанням зовнішніх методів (наприклад, закупівля посилань), краще вибирати основне дзеркало на основі кількості посилань. Визначити кількість посилань можна за допомогою будь-якого доступного сервісу.
Думка SEO-фахівця (порада від практикуючого інтернет-маркетолога, який оптимізує сайти для пошукових систем)
Не забудьте використовувати не тільки файл .htaccess, але й інструменти для веб-майстрів різних пошукових систем. З їхньою допомогою можна вказати основне дзеркало. Для цього знадобляться Google Search Console (google.com/webmasters).
У кабінеті веб-майстра Google виконайте такі кроки для призначення основного дзеркала. Спочатку додайте два ресурси, наприклад, primer.ua та www.primer.ua.
Після додавання обох ресурсів необхідно підтвердити їх одним із запропонованих способів. Наприклад:
Після підтвердження обох варіантів домену, натисніть на піктограму шестерні (налаштування) у нижньому лівому кутку та виберіть пункт «Налаштування сайту». Це можна зробити незалежно від того, яке дзеркало відображається на даний момент в обліковому записі — з www або без нього.
У полі виберіть потрібний варіант дзеркала і збережіть зміни. Тепер у інструментах для вебмайстрів обох пошукових систем ваше основне дзеркало налаштоване.
Далі, вам потрібно налаштувати 301-й редирект і файл Robots.txt (HOST), щоб остаточно вказати пошуковикам основне дзеркало вашого сайту.
Редирект на "без WWW"
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.primer\.au$ [NC]
RewriteRule ^(.*)$ http://primer.au/$1 [R=301,L]
Редирект на "з WWW"
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^primer\.au$ [NC]
RewriteRule ^(.*)$ http://www.primer.au/$1 [R=301,L]
*Обов’язково замініть вказані домени в прикладах на вашу власну адресу!
Для використання цих налаштувань переконайтеся, що в httpd.conf підключено модуль mod_rewrite та включено опцію FollowSymLinks. На більшості хостингів цей модуль увімкнено за замовчуванням.
Редирект без слешу на кінці
Ще одна проблема з дублюванням – це відкриття сторінок як зі слешем, так і без слеша в кінці URL. Наприклад, сторінки можуть відкриватися за такими адресами:
- https://primer.au/contact/
- https://primer.au/contact
Щоб уникнути цієї проблеми і налаштувати редирект без слєша, додайте в .htaccess наступний код:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
Редирект зі слешем на кінці
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
301-й редирект у файлі .htaccess
Код стану HTTP 301, або “Moved Permanently,” є стандартним кодом відповіді, який сервер відправляє, коли запитуваний ресурс постійно переміщений на нове місцезнаходження. Цей код вказує, що поточні посилання, які використовують цю URL-адресу, повинні бути оновлені.
Якщо у вас ситуація, коли сторінка має некоректну адресу і з’являється в результатах пошуку за рядом запитів, і ви хочете виправити її на більш привабливу адресу, вам знадобиться редирект сторінки на новий URL:
Наприклад, перенаправлення з https://primer.аu/cont на https://primer.аu/contact
У цьому випадку просто додайте наступний код у .htaccess:
Redirect 301 /cont https://primer.аu/contact
Інший спосіб виконання посторінкового редиректу – це переадресація через PHP. Цей метод корисний, якщо сайт працює на самописній CMS або якщо немає можливості використовувати .htaccess, а сайт складається з безлічі .php сторінок. Для переадресації зі старого URL на новий додайте на початок файлу наступний код:
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: https://primer.аu/test.html”);
exit();
Якщо у вас багато редиректів на PHP, краще створити окремий файл, який містить усі правила. Ось приклад такого файлу:
if ($_SERVER[‘REQUEST_URI’] == ‘/old-url-1/’) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: https://primer.au/new-url-1/”);
exit();
}
if ($_SERVER[‘REQUEST_URI’] == ‘/old-url-2/’) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: https://primer.au/new-url-2/”);
exit();
}
Ви можете написати стільки правил, скільки необхідно, та організувати їх синтаксично будь-яким зручним способом. Не забудьте підключити створений файл на ваш сайт.
Посторінковий редирект на таку ж сторінку іншого домену (через PHP):
$ref = $_SERVER[“QUERY_STRING”];
if ($ref != “”) $ref = “?” . $ref;
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: https://primer.au/” . $ref);
exit();
На цьому приклади для 301 редиректу PHP закінчуються. Повернемося до стандартного способу налаштування редиректів через .htaccess.
Редирект каталогу або категорії сайту на нову адресу
Якщо у вас некоректна адреса категорії сайту, це можна виправити за допомогою наступного коду:
RewriteRule ^pri1-mer /primer/$1 [R=301,L]
Редирект сайту на новий домен
Іноді потрібно перенести старий сайт на новий, можливо, більш привабливий домен. Це може бути необхідно, наприклад, при ребрендингу компанії. Щоб не втратити позиції сайту та трафік, пропишіть на старому сайті наступний код у .htaccess:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} ^old-primer\.аu
RewriteRule ^(.*)$ http://new-primer.аu/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.old-primer\.аu
RewriteRule ^(.*)$ http://new-primer.аu/$1 [R=301,L]
Після цього не забудьте внести зміни до файлу Robots.txt, додавши наступний код:
User-agent: Google
Host: new-primer.аu
User-agent: *
Disallow:
Sitemap: http://new-primer.аu/sitemap.xml
Перенесення сайту на іншу CMS та редирект
При перенесенні сайту на нову систему керування (CMS) сторінки можуть мати інші розширення. Наприклад, адреси можуть змінитися з http://primer.au/okna.html на http://primer.au/okna.php.
Для цього використовуйте наступний редирект:
RedirectMatch 301 (.*)\.html$ http://primer.аu$1.php
Редирект з index.php на корінь сайту
Для редиректу з http://primer.аu/index.php на http://primer.аu використовуйте такий регулярний вираз:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://primer.аu/ [R=301,L]
Налаштування файлу .htaccess для домену (кириличні URL-адреси)
Робота з редиректами .htaccess для кириличних доменів, таких як .SA і .AУ, може бути складною, оскільки ці домени є частиною IDN-доменів. Наприклад, сайт.РП. Для таких доменів потрібно перевести їх у Punycode, використовуючи безкоштовний Punycode-конвертер для доменів.
Для конвертації вставте ваш домен у пошуковий рядок:
І отримуємо результат. Зверніть увагу на рядки — найчастіше домен .РП (.xn-p1ai) відділений символом . Використовуйте все так, як пропонує конвертер.
Тепер ви можете використовувати переконвертований домен для роботи з виразами в .htaccess:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.xn--80arbjktj.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://xn--80arbjktj.xn--p1ai/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://xn--80arbjktj.xn--p1ai/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://xn--80arbjktj.xn--p1ai/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://xn--80arbjktj.xn--p1ai/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.php\ HTTP
RewriteRule ^([^.]+)\.php$ http://xn--80arbjktj.xn--p1ai/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*
Редирект з index.html на папку (видалення з рядка браузера index.html)
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ http://www.primer.com/$1 [R=301,L]
Редирект з .htm файлів на .html файли
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.htm$ $1.html [R=301,L]
Альтернативний варіант редиректу з .htm файлів на .html файли
RewriteRule ^(.*)\.htm$ $1.html [R=301]
Щоб замість page.htm завантажувався файл page.html
RewriteRule ^page\.htm$ page.html [R=301]
Завдання типу індексної сторінки (php, html, htm та інші)
Вкажіть порядок завантаження типів індексного файлу, що знаходяться в корені каталогу:
DirectoryIndex index.html index.php index.htm index.shtml
Приклад того, як індексний файл виглядає у каталозі сайту:
Визначення кодування для файлів, що завантажуються
CharsetSourceEnc windows-1251
Варіанти: KOI8-R, UTF-8, Windows-1251
Приклади .htaccess для кешування
Ці команди дозволять сайту швидше завантажуватись для користувачів, які вже відвідували його раніше.
Кешування для всіх типів файлів за часом доступу
ExpiresActive on
ExpiresDefault “access plus 600 seconds”
Кешування для всіх типів файлів за часом зміни
ExpiresActive on
ExpiresDefault “modification plus 600 seconds”
Кешування для певних типів файлів
ExpiresByType text/css “modification plus 600 seconds”
ExpiresByType image/jpeg “modification plus 600 seconds”
ExpiresByType image/gif “modification plus 600 seconds”
ExpiresByType image/x-ico “modification plus 600 seconds”
ExpiresByType image/png “modification plus 600 seconds”
Додатково перелік типів файлів, які можна кешувати:
- image/x-icon
- image/jpeg
- image/png
- image/gif
- application/x-shockwave-flash
- text/css
- text/javascript
- application/javascript
- application/x-javascript
- text/html
- application/xhtml+xml
Кешування JavaScript файлів за допомогою файлу .htaccess
<FilesMatch “.*\.js$”>
ExpiresDefault “access plus 3 days”
</FilesMatch>
.htaccess для усунення дублів головної сторінки
Код головної сторінки зазвичай розміщений у файлі index.html або index.php, але сайт повинен відкриватися за будь-яким із запитів: site.com, site.com/index.html, www.site.com та www.site.com/index. html. Для пошукових систем це чотири різних URL, і якщо .htaccess не налаштований правильно, пошуковик додасть до свого індексу чотири однакові сторінки, що вказує на низьку якість сайту. Уникнути цієї проблеми можна за допомогою наступного коду в .htaccess:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^primer.com
RewriteRule (.*) http://www.primer.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.primer.com/ [R=301,L]
Обробка PHP-коду в HTML-сторінках
Щоб змусити HTML-сторінки обробляти PHP-код, використовуйте наступний код:
RemoveHandler .php .htm .html
AddHandler application/x-httpd-php .php .htm .html
Розміщення двох або більше сайтів на одному віртуальному хостингу
RewriteEngine On
RewriteRule ^newdirectory/ — [L]
RewriteCond %{HTTP_HOST} (www.)?newdomain.аu [NC]
RewriteRule (.*) newdirectory/$1 [L]
Де:
- newdirectory/ — папка, де буде розміщено другий сайт.
- newdomain.аu — домен, для якого налаштовується перенаправлення.
Зверніть увагу, що при цьому використовуватиметься єдиний поштовий обліковий запис. Наприклад, якщо у вас є скринька admin@domain.аu, після підключення домену newdomain.au у цієї скриньки з’явиться друге ім’я — admin@newdomain.au. При створенні будь-якої нової скриньки (наприклад, info), їй автоматично надаються два імені – info@domain.au та info@newdomain.au.
Видалення "category" з URL через .htaccess
Щоб змінити посилання primer.com/category/blue на primer.com/blue, додайте наступний код до кінця файлу .htaccess:
RewriteRule ^category/(.+)$ http://www.primer.com/$1 [R=301,L]
Редирект для усунення параметрів GET
Наприклад, щоб перенаправити зі сторінки /?action=page&id=15 на /page/15/, додайте такі рядки:
RewriteCond %{QUERY_STRING} action=page [NC]
RewriteCond %{QUERY_STRING} id=(\d+) [NC]
RewriteRule .* /page/%1/? [R=301,L]
Редирект на мобільну версію сайту
Часто мобільна версія сайту представлена піддоменом, наприклад, m.primer.com. Для переходу на мобільну версію тільки з головної сторінки основного домену використовуйте наступний код:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.primer\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^$ http://m.primer.com/ [R=302,L]
Цей код забезпечить перенаправлення користувачів на мобільну версію сайту за доступу до головної сторінки основного домену.
Редирект на мобільну версію сайту (Неперевірена версія)
RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda |mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC |samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp |wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda |sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) [NC]
RewriteCond %{HTTP_HOST} primer.com
RewriteRule ^$ http://m.primer.com/ [R=302,L]
Перший рядок перевіряє USER_AGENT, щоб визначити, що запит надходить від мобільного пристрою.
Другий рядок перевіряє, що запит надходить із потрібного домену (приклад не універсальний).
Третій рядок перевіряє, що запит йде на головну сторінку (без параметрів) і перенаправляє на піддомен.
Редирект на мобільну версію сайту (Універсальна версія)
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml |pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio |SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx| panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird |compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) [NC]
RewriteRule ^$ http://m.%1 [R=302,L]
Налаштування повідомлень про помилки Apache
Найпоширеніші коди помилок:
- 401 – Проблеми з авторизацією.
- 404 – Сторінка не знайдена.
- 403 – Доступ заборонено.
- 500 – Внутрішня помилка сервера.
Щоб показувати користувачам свою сторінку помилки замість стандартної, створіть окрему сторінку (наприклад, /401.html) та додайте відповідний код у файл .htaccess:
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
Збереження (завантаження) файлів замість відкриття
Щоб браузер не відкривав, а зберігав файли певних типів, використовуйте наступний код:
AddType application/octet-stream .rar .doc .mov .avi .pdf .xls .mp4
Переадресація з www.primer.com/index.php?idc=4&marea=6 на www.primer.com/
RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC]
RewriteRule ^index\.php$ /? [R=301,L]
Редирект із піддомену на основний домен другого рівня
RewriteCond %{HTTP_HOST} ^test.primer.com$ [NC]
RewriteRule ^(.*)$ http://primer.com%{REQUEST_URI} [R=301,NC,L,QSA]
Зміна змінних PHP та передача обробки іншому скрипту
RewriteCond %{QUERY_STRING} ^parameter=(.+)$
RewriteRule (.*) parameter.php?%1 [L]
Видалення змінних PHP із запиту (вирізання з URI всього, що знаходиться після знаку питання)
RewriteRule (.*) $1? [R=301,L]
Заборона входу на сайт через .htaccess
Заборона доступу для Internet Explorer (або для тих, хто себе так визначає) та користувачів з певної IP-адреси:
RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteCond %{REMOTE_ADDR} ^xxx\.xxx\.xxx\.xxx$
RewriteRule ^.*$ – [F]
Повна заборона входу на сайт
deny from all
Заборона доступу до файлу
<Files admin.php>
deny from all
</Files>
Дозвіл доступу лише з одного IP
order deny,allow
deny from all
allow from 192.111.37.125
Заборона доступу з конкретних IP-адрес
<Limit GET POST PUT>
order allow,deny
allow from all
deny from 192.111.35.122
deny from 192.111.37.171
</Limit>
При запиті файлу .htaccess повідомляємо, що він не існує (410, GONE)
RewriteRule ^/.htaccess$ – [G]
Інший метод:
RewriteRule ^/.htaccess$ – [F]
Заборона відображення вмісту директорії, якщо немає індексного файлу
Options -Indexes
Перенаправлення з HTTPS на HTTP
RewriteCond %{HTTPS} on
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
Редиректи в залежності від часу
Використання тимчасових умов для редиректів:
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^foo\.html$ foo.day.html
RewriteRule ^foo\.html$ foo.night.html
Редирект в URL з підкреслення на дефіс
RewriteRule ^(.+)(\s|_)(.+)$ /$1-$3 [R=301,L]
Редирект в URL з великих букв на маленькі
RewriteRule [A-Z] – [E=HASCAPS:TRUE,S=1]
RewriteRule ![A-Z] – [S=28]
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2
RewriteRule [A-Z] – [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [R=301,L]
Масовий редирект нових файлів
Створіть таблицю відповідності у базі даних, яка міститиме старий ID та новий URL для редиректу. Потім додайте наступний рядок до .htaccess:
RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2
Створіть PHP-файл redirectold.php для підтримки 301 редагування:
<?php
function getRedirectUrl($productid) {
$dServer = “localhost”;
$dDb = “mydbname”;
$dUser = “mydb_user”;
$dPass = “password”;
$s = @mysql_connect($dServer, $dUser, $dPass) or die(“Couldn’t connect to database server”);
@mysql_select_db($dDb, $s) or die(“Couldn’t connect to database”);
$query = “SELECT new_url FROM redirects WHERE old_id = “.$productid;
$result = mysql_query($query);
$hasRecords = mysql_num_rows($result) == 0 ? false : true;
if (!$hasRecords) {
$ret = ‘http://www.site.com/’;
} else {
while($row = mysql_fetch_array($result)) {
$ret = ‘http://www.site.com/’. $row[“new_url”];
}
}
mysql_close($s);
return $ret;
}
$productid = $_GET[“productid”];
$url = getRedirectUrl($productid);
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: $url”);
exit();
?>
Тепер всі запити до ваших старих URL будуть викликати redirectold.php, який знайде нову URL-адресу і поверне 301 відповідь з новим посиланням.
Гарний лістинг каталогів
Options +Indexes
IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* +IconsAreLinks
IndexHeadInsert “<meta name=’viewport’ content=’width=device-width, initial-scale=1′ />”
IndexIgnore .htaccess /listing
AddIcon /data/listing/icons/blank.png ^^BLANKICON^^
AddIcon /data/listing/icons/folder.png ^^DIRECTORY^^
AddIcon /data/listing/icons/folder-home.png ..
AddIconByType (TXT,/data/listing/icons/text.png) text/*
AddIconByType (IMG,/data/listing/icons/image.png) image/*
AddIconByType (SND,/data/listing/icons/audio.png) audio/*
AddIconByType (VID,/data/listing/icons/video.png) video/*
AddIcon /data/listing/icons/archive.png .7z .bz2 .cab .gz .tar
AddIcon /data/listing/icons/audio.png .aac .aif .aifc .aiff .ape .au .flac .iff .m4a .mid .mp3 .mpa .ra .wav .wma .f4a .f4b .oga .ogg .xm .it .s3m .mod
Змінюючи файл .htaccess, можна серйозно порушити роботу сайту. Необдумані дії з цим файлом можуть мати видимих наслідків відразу, але призвести до зниження позицій у пошукових системах чи його повної втрати. Щоб уникнути помилок, рекомендуємо спочатку ознайомитись з допустимими директивами для налаштування .htaccess.
Для мінімізації ризиків далі ми надаємо стандартні .htaccess файли для популярних CMS.
Файл .htaccess для Joomla
##
# @version $Id: htaccess.txt 14401 2010-01-26 14:10:00Z louis $
# @package Joomla
# @copyright Copyright (C) 2005 — 2010 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##
#####################################################
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE
#
# The line just below this section: ‘Options +FollowSymLinks’ may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url’s. If they work,
# it has been set by your server administrator and you do not need it set here.
#
#####################################################
## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks
#
# mod_rewrite in use
RewriteEngine On
########## Begin — Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
## Deny access to extension xml files (uncomment out to activate)
#<Files ~ «\.xml$»>
#Order allow,deny
#Deny from all
#Satisfy all
#</Files>
## End of deny access to extension xml files
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End — Rewrite rules to block out some common exploits
# Uncomment following line if your webserver’s URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root)
# RewriteBase /
########## Begin — Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* — [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End — Joomla! core SEF Section
Файл .htaccess для WordPress
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Файл .htaccess для HostCMS
Options +FollowSymlinks
AddDefaultCharset Off
<IfModule mod_php4.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
</IfModule>
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
php_flag register_globals off
</IfModule>
<IfModule mod_dir.c>
DirectoryIndex index.php index.htm index.html
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
</IfModule>
Файл .htaccess для ModX:
# MODx supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODx.
# E.g., «/modx» if your installation is in a «modx» subdirectory.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
RewriteEngine On
RewriteBase /
# Rewrite www.domain.com -> domain.com — used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# DO NOT USE BOTH
#
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
#RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
#
# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com.com/$1 [R=301,L]
#
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
#
# Make sure .htc files are served with the proper MIME type, which is critical # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
#AddType text/x-component .htc
#
# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP’s register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for «register_globals». The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.
#
#php_flag register_globals Off
#
# For servers that support output compression, you should pick up a bit of
# speed by un-commenting the following lines.
#
#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5
#
# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they’re in place, you may have
# to do a force-refresh in order to see changes in your designs.
#
#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch «MSIE» brokenvary=1
#BrowserMatch «Mozilla/4.[0-9]{2}» brokenvary=1
#BrowserMatch «Opera» !brokenvary
#SetEnvIf brokenvary 1 force-no-vary
Файл .htaccess для Drupal:
#
# Apache/PHP/Drupal settings:
#
# Protect files and directories from prying eyes.
<FilesMatch «\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$»>
Order allow,deny
</FilesMatch>
# Don’t show directory listings for URLs which map to a directory.
Options -Indexes
# Follow symbolic links in this directory.
Options +FollowSymLinks
# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php
# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
# There is no end quote below, for compatibility with Apache 1.3.
ErrorDocument 404 «The requested file favicon.ico was not found.
</Files>
# Set the default handler.
DirectoryIndex index.php index.html index.htm
# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_initialize_variables() in
# includes/bootstrap.inc for settings that can be changed at runtime.
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
</IfModule>
# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On
# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600
<FilesMatch \.php$>
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
</FilesMatch>
</IfModule>
# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
# Block access to «hidden» directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# <DirectoryMatch> is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule «(^|/)\.» — [F]
# If your site can be accessed both with and without the ‘www.’ prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the ‘www.’ prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the ‘www.’ prefix,
# (http://example.com/… will be redirected to http://www.example.com/…)
# uncomment the following:
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
# To redirect all users to access the site WITHOUT the ‘www.’ prefix,
# (http://www.example.com/… will be redirected to http://example.com/…)
# uncomment the following:
# RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
# RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /
# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule \.css\.gz$ — [T=text/css,E=no-gzip:1]
RewriteRule \.js\.gz$ — [T=text/javascript,E=no-gzip:1]
<FilesMatch «(\.js\.gz|\.css\.gz)$»>
# Serve correct encoding type.
Header append Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
</IfModule>
Файл .htaccess для NetCat
AddDefaultCharset windows-1251
ErrorDocument 404 /netcat/require/e404.php
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ /netcat/require/e404.php?REQUEST_URI=$1 [L,QSA]
</ifModule>
Файл .htaccess для DLE
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
# Редиректи
RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]
# Сам пост
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_ name=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
RewriteRule ^([^.]+)/([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$1&newsid=$2&seourl=$3 [L]
RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1&seourl=$2 [L]
# За день
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
# За весь місяць
RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
# Вивід за весь рік
RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
# вивід окремому тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]
# вивід для окремого користувача
RewriteRule ^user/([^/]*)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]
# вивід всіх останніх новин
RewriteRule ^lastnews/(/?)+$ index.php?do=lastnews [L]
RewriteRule ^lastnews/page/([0-9]+)(/?)+$ index.php?do=lastnews&cstart=$1 [L]
# вивід у вигляді каталогу
RewriteRule ^catalog/([^/]*)/rss.xml$ engine/rss.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
# вивід непрочитаних статей
RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
# вивід вибраних статей
RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]
RewriteRule ^rules.html$ index.php?do=rules [L]
RewriteRule ^statistics.html$ index.php?do=stats [L]
RewriteRule ^addnews.html$ index.php?do=addnews [L]
RewriteRule ^rss.xml$ engine/rss.php [L]
RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/page/([0-9]+)/$ index.php?do=cat&category=$1&cstart=$2 [L]
RewriteRule ^([^.]+)/$ index.php?do=cat&category=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]
RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
RewriteRule ^print:([^/]+).html$ engine/print.php?do=static&page=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]
Файл .htaccess для Opencart
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
Файл .htaccess для Webasyst
<FilesMatch «\.md5$»>
Deny from all
</FilesMatch>
DirectoryIndex index.php
Options -Indexes
# Comment the following line, if option Multiviews not allowed here
Options -MultiViews
AddDefaultCharset utf-8
<ifModule mod_rewrite.c>
RewriteEngine On
# Uncomment the following line, if you are having trouble
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|jpg|jpeg|gif|png|svg|ttf|eot|otf|woff|woff2)$ [or]
RewriteCond %{REQUEST_URI} apple-touch-icon\.png$ [or]
RewriteCond %{REQUEST_METHOD} ^(POST|PUT|COPY|MOVE|DELETE|PROPFIND|OPTIONS|MKCOL)$ [or]
RewriteCond %{HTTP:Translate} ^.+$ [or]
RewriteCond %{HTTP_USER_AGENT} ^(DavClnt|litmus|gvfs|davfs|wdfs|WebDAV|cadaver|Cyberduck)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
</ifModule>
<ifModule mod_headers.c>
<FilesMatch «\.(jpg|jpeg|png|gif|js|css|svg|ttf|eot|otf|woff|woff2)$»>
Header set Cache-Control «max-age=3153600, public»
</FilesMatch>
</ifModule>
Файл .htaccess для LiveStreet
AddDefaultCharset UTF-8
Options -Indexes
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php
# Alternative rule
#RewriteRule ^(.*)$ /index.php
<Files «plugins.dat»>
order allow,deny
deny from all
</Files>

