Модуль mod_rewrite.so в першу чергу призначений для імітації файлів і папок на серверах типу Apache. Тобто папки або файли, які не обов’язково мають існувати на сервері, їх може замінювати один або кілька серверних програмних скриптів з розширеннями .php, .asp або будь-які інші виконуються на стороні сервера програми.

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

Так як же динамічні сайти обманюють пошукачів, і головне, навіщо їм це потрібно? Відповідь на це питання проста, вони відсилають їм такі заголовки (header), що б пошуковики повірили в те, що це дійсно фізично існуючі файли. Ну а потрібно це багатьом сайтам, і в першу чергу для економії трафіку. Адже якщо сайт є популярним і при цьому дуже великим (більше 100 Mb чистого контенту), то пошукові системи можуть індексувати його майже кожен день, що з точки зору розрахунків 100×30;3 Гігабайти, і це за умови, що сайт індексує всього один пошуковий робот. А при симуляції реальних файлів, і відправлення правильних заголовків пошуковики не будуть «викачувати» все вже проіндексовані сторінки, за умови, що їх розмір і дата не будуть змінюватися з плином часу.

Для роботи з mod_rewrite вам необхідно в кореневій папці сайту створити (якщо немає) або дописати у вже існуючий .htaccess, рядок:

RewriteEngine on

Після цього, якщо mod_rewrite був встановлений на вашому сервері, він повинен почати працювати. Про те, як використовувати всі можливості mod_rewrite і взагалі, що це таке, ви можете почитати в інших моїх статтях: Псевдостатика (mod_rewrite). Частина 1, Частина 2.

Після того як mod_rewrite був налаштований та сайт був пристосований для роботи з ним, тобто всі динамічні URL були перетворені на статичні, можна приступати до виправлення відсилаються заголовків. Основна маса пошукових роботів при індексації запитує тільки дату останньої модифікації та розмір документа, але є і більш вибагливі, і щоб задовольнити всіх мені довелося неабияк повозитися з їх документацією. І ось невелика таблиця, в якій описані основні заголовки, які запитують пошуковики для визначення типу сторінки:

If-Modified-Since Заголовок, який відправляє скрипту пошуковий робот, в ньому міститься дата (у форматі GMT) останньої зміни файлу, що зберігається у пошукового робота. У відповідь на нього потрібно відсилати header(«HTTP/1.1 304 Not Modified»), якщо дата зміни файлу не була змінена.

Content-Length Розмір файлу, цей заголовок повинен відправляти скрипт, причому він повинен відповідати реальності і завжди бути однаковим.

Last-Modified Дата (у форматі GMT) поточного зміни, повинна дорівнювати тій дати, що вказана в If-Modified-Since, якщо ви не хочете, щоб сторінка була ще раз скачана роботом.

Expires Дата (у форматі GMT) дійсності файлу/документа, по ідеї після спливу цієї дати пошуковики повинні перестати видавати даний файл/документ в результатах пошуку.

Content-Type Зміст (тип) файлу, необхідний пошуковику для прийняття рішення, завантажувати файл чи ні. Наприклад, якщо файл має розширення .exe або .dll то його зміст, напевно, нікому не знадобиться, з цієї причини деякі файли навіть не викачуються пошуковими роботами.

http_range Потрібен для підтримки докачки файлів. Даний заголовок відправляється пошуковим роботом і містить розмір вже завантажених даних (використовується пошуковими вкрай рідко).

accept-ranges Розмір файлу при використанні докачки даних (використовується пошуковими вкрай рідко).

content-range Позиція, з якої йде завантаження файлу даних (використовується пошуковими вкрай рідко).

В таблиці я не став вносити заголовки станів сторінки (200, 303, 302, 301, 404), ваш сервер в будь-якому випадку повинен відсилати сам, але якщо вам хочеться, то ви теж можете змінювати. Більш детальну інформацію шукайте у статті ПРОТОКОЛ ПЕРЕДАЧІ ГІПЕРТЕКСТУ HTTP / 1.1 та Коди відповідей сервера.

З цієї статті ви повинні були засвоїти, що для великих і відвідуваних сайтів використання mod_rewrite + header() життєво необхідно. Навіть якщо вам доведеться повністю міняти движок сайту або його переробляти (для правильного відображення всіх URL), то це економічно обґрунтовано, оскільки витрачати свій трафік з пошукових роботів не целеобразно. Адже приблизна ціна гігабайти трафіку становить 1-2$, і з вище розрахунків видно, що на одного пошукового робота буде доводитися по 3-6$ в місяць, а таких ботів зазвичай не менше п’яти, в результаті вийде дуже значна сума навіть для дуже багатого і великого інтернет-проекту. Тому великі динамічні сайти краще відразу створювати орієнтовані на роботу з mod_rewrite + правильний header(), і тоді індексація сайту безліччю пошукачів для вас не буде проблемою.

Про відправку заголовків раджу почитати статтю Harry Fuecks (Переклад: Муллин Сергій, Кузьма Феськов) «Кешування в PHP».