Це незавершена стаття. Дописати.
До теперішнього часу в Рунеті я так і не зміг знайти статті, в якій би доступно і повно розповідалося про те, як налаштовувати директиви RewriteCond і RewriteRule в файлі .htaccess.
Ніде немає відповіді на самі основні питання: як відбувається перетворення URL, переданого браузером? Як побачити новий перетворений URL? А чи можна подивитися лог перетворень URL?
Нам дають якийсь чорний ящик, в якому потрібно писати якісь дивні заклинання, не бачачи, що відбувається в процесі і на виході. Нас це не влаштовує. Тому будемо розбиратися.
Далі передбачається, що модуль mod_rewrite підключений до Апач і працює, а нам залишилося тільки правильно прописати директиви перенаправлення URL у файлі .htaccess.
Як працює перенаправлення URL в .htaccess через модуль mod_rewrite?
Рядками нашої умовної програми є директиви модуля mod_rewrite:
- RewriteEngine - включення / вимикання перенаправлення. Зазвичай використовується на початку файлу. htaccess у вигляді:
RewriteCond что_сравніваем с_чем_сравніваем
RewriteRule виконається тільки в тому випадку, якщо всі попередні директиви RewriteCond знаходиться в значенні True.RewriteRule ісходная_строка (тобто. Шаблон) преобразованная_строка (тобто. Підстановка) [Прапори]
Тут ми будемо розглядати тільки найпростіше і найпопулярніше перетворення: перетворення рядка URL в ім'я файлу на ресурсі, де крутиться Apache.
В якому вигляді потрапляє URL всередину .htaccess?
У файл .htaccess рядок URL потрапляє без позначення протоколу і імені домену.
Як побачити перетворення URL?
Поки ми не будемо бачити перетворень, яких зазнає URL при спрацьовуванні директив mod_rewrite. ми не зможемо зрозуміти його роботу і не зможемо правильно написати файл .htaccess.
Побачити лог перетворень mod_rewrite можна в балці Апача. Але для початку потрібно налаштувати Апач так, щоб інформація про перетворення URL потрапляла в лог. Налаштування для Апача версій нижче 2.4 і Apache 2.4 і вище відрізняються.
Для Апача до версії 2.4:
У настроювальному файлі Апача httpd.conf треба перевірити наявність директив RewriteLog і RewriteLogLevel. (За браком їх потрібно додати), і встановити наступні значення цих директив:
# Для Apache версій нижче 2.4
Шлях до файлу лога повинен існувати в файлової системі. У цьому файлі буде складатися інформація про перетворення URL.
Для Апача 2.4 і вище:
У настроювальному файлі Апача httpd.conf треба знайти директиву LogLevel і встановити їй значення:
# Для Apache 2.4 і вище
LogLevel alert rewrite: trace3
Інформація про перетворення URL буде складатися в балці Апача (перевірити, можливо, що не так, у мене немає Apache 2,4).
Після чого необхідно перезапустити Апач. В логах буде видно приблизно такі записи:
rewrite 'admin / vipPortPageId / forward_function' -> 'index.php / admin / vipPortPageId / forward_function'
RewriteCond: input = '/ small / asdfsadf / avatar.jpg' pattern = '^ (. *) / (. *) / (. *)' => Matched
RewriteCond: input = '/ var / www / local.dev / www / small / avatar.jpg' pattern = '- f' => matched
rewrite 'small / asdfsadf / avatar.jpg' -> '/small/avatar.jpg'
internal redirect with /small/avatar.jpg [INTERNAL REDIRECT]
Увага! Логування результатів перетворень в mod_rewrite - дуже времязатратний процес. Не допускайте таких налаштувань на сервері в продершене. Навіть на тестовому сервері налаштуйте логирование, отладьте перенаправлення, а потім поверніть настройки назад.