fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Технології

Додаткові домени і робота модуля сервера Apache mod_rewrite

Модуль mod_rewrite сервера Apache це чудова можливість надати динамічному сайту вид статичного для того, щоб опинитися в індексі багатьох пошукових машин, які абсолютно не розуміють значки присутні в динамічній посиланню типу ? & і геть відмовляються індексувати сайти з динамічними посиланнями, хіба що крім головної сторінки.
Крім того модуль mod_rewrite дозволяє компенсувати недоліки індексації сайту з www і без www. Достеменно відомо, що якщо для користувача один і той же сайт з www і без www це одне і те ж, то для багатьох пошуковиків це два різних сайту і сторінки цих двох яобы різних сайтів навіть можуть бути по різному індексовані.
Є ще одне цікаве застосування модуля mod_rewrite. Всім відомо, що практично будь-який сучасний хостинг крім основного паркованного дозволяє на одному IP мати так звані додаткові домени. Їх цілком може бути кілька штук. Це означає, що хостинг дозволяє на одному акаунті мати кілька сайтів. Найчастіше основний домен це великий динамічний сайт, де у файлі .htaccess прописані правила роботи модуля mod_rewrite для цього сайту в які входять правила перетворення статиічних посилань сайту в динамічні для правильної роботи скриптів сайту. Але якщо на додаткових доменах стоять, наприклад старенькі статичні сайти, а вони, як правило, знаходяться в одній і тій же папці аккаунта public_html, то вони просто перестануть працювати, тому, що для них теж буде працювати правило з основного .htaccess перетворення статичних посилань в динамічні. Вихід з цього достатньо простий. Оскільки в кожній папці з додатковим доменом також є файл .htaccess то в ньому досить прописати зворотне правило і статичний сайт запрацює, як і раніше.
А тепер трохи детальніше. Розглянемо описані моменти на прикладі будь-якої динамічної посилання динамічного сайту . Припустимо посилання з трьома параметрами та її складові:

Це, щось на зразок сторінки вкладеної в розділ та підрозділ. На самому динамічному сайті такі посилання цілком можна прописати у вигляді:

Правила для перетворення таких посилань у динамічні, які прописуються у файлі .htaccess будуть виглядати наступним чином:
# Внутрішні перетворення статичних URL динамічні
RewriteRule ^(.*)index.html$ index.php [L]
RewriteRule ^([^/]+)/?.html$ index.php?sect=textarea [L]
RewriteRule ^([^/]+)/$ index.php?sect=textarea [L]
RewriteRule ^([^/]+)/([^/]+)/?.html$ index.php?sect=textarea&subsect= [L]
RewriteRule ^([^/]+)/([^/]+)/$ index.php?sect=textarea&subsect= [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?.html$ index.php?sect=textarea&subsect=&ref= [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ index.php?sect=textarea&subsect=&ref= [L]
Явно видно, що представлені вище правила дозволяють працювати посилання в кожному з прийнятих на сьогодні видів. Тобто:
або
або
або
Що найцікавіше працювати будуть також і рідні скриптам сайту динамічні посилання виду:

А це дуже важливо в тому сенсі, що якщо сайт не новий і вже був проіндексовані деякими пошуковими системами, які розуміють динамічні посилання, наприклад такі, як Google, Yandex, то з індексу не пропаде ні одна сторінка. Просто при наступних, після додавання до сайту правил mod_rewrite, заходжень пошукових ботів на сайт старі динамічні посилання сайту в індексі поступово будуть замінені на нові статичні.
Нижче наведена записсь в файл .htaccess усуне різночитання для пошукових систем для сайту з www і без, якщо сайт спочатку знаходиться в домені без www.
RewriteCond %{HTTP_HOST} ^www.mysite.ru$
RewriteRule ^(.*)$ [R=301,L]
Ну в повному вигляді вміст файлу .htaccess для модуля mod_rewrite динамічного сайту може бути наступне:
DirectoryIndex index.php
# Запуск mod_rewrite
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.mysite.ru$
RewriteRule ^(.*)$ [R=301,L]
# Внутрішні перетворення статичних URL динамічні
RewriteRule ^(.*)index.html$ index.php [L]
RewriteRule ^([^/]+)/?.html$ index.php?sect=textarea [L]
RewriteRule ^([^/]+)/$ index.php?sect=textarea [L]
RewriteRule ^([^/]+)/([^/]+)/?.html$ index.php?sect=textarea&subsect= [L]
RewriteRule ^([^/]+)/([^/]+)/$ index.php?sect=textarea&subsect= [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?.html$ index.php?sect=textarea&subsect=&ref= [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ index.php?sect=textarea&subsect=&ref= [L]
А ще нижче вміст .htaccess для директорії зі статичним сайтом (зазвичай ця директорія має назву самго сайту без http www) перебувають на додатковому домен в папці public_html. Папка public_html це зазвичай тека кореневої директорії основного парованного домену сайту на хостингу
DirectoryIndex index.html
# Запуск mod_rewrite
RewriteEngine on
Options +FollowSymlinks
#RewriteBase /
# Перехід з динаміки на статику
RewriteRule ^(.*)index.php$ index.html [L]
Тут все не складно. Якщо наприклад в браузері набраний адреса індексного сторінки статичного сайту, що знаходиться на додатковому домені, то оскільки директорія додаткового домену знаходиться в директорії основного домену, тобто в папці public_html, то спрацює mod_rewrite і правило прописане в основному .htacces RewriteRule ^(.*)index.html$ index.php [L] і пеереведет введену адресу на динаміку. Потім перетворений адресу, потрапивши в додатковий домен, перетвориться назад в статиці після спрацьовування mod_rewrite і правила прописані у файлі .htacces додаткового домену RewriteRule ^(.*)index.php$ index.html [L]. То ж буде відбуватися з адресою будь-якої іншої сторінки статичного сайту на додатковому домені.
Першоджерело: Mod_rewrite і додаткові домени