Apache 2 як налаштовувати перенаправлення url в

Це незавершена стаття. Дописати.

До теперішнього часу в Рунеті я так і не зміг знайти статті, в якій би доступно і повно розповідалося про те, як налаштовувати директиви RewriteCond і RewriteRule в файлі .htaccess.

Ніде немає відповіді на самі основні питання: як відбувається перетворення URL, переданого браузером? Як побачити новий перетворений URL? А чи можна подивитися лог перетворень URL?

Нам дають якийсь чорний ящик, в якому потрібно писати якісь дивні заклинання, не бачачи, що відбувається в процесі і на виході. Нас це не влаштовує. Тому будемо розбиратися.

Далі передбачається, що модуль mod_rewrite підключений до Апач і працює, а нам залишилося тільки правильно прописати директиви перенаправлення URL у файлі .htaccess.

Як працює перенаправлення URL в .htaccess через модуль mod_rewrite?

Рядками нашої умовної програми є директиви модуля mod_rewrite:

  • RewriteEngine - включення / вимикання перенаправлення. Зазвичай використовується на початку файлу. htaccess у вигляді:
RewriteEngine On
  • RewriteBase - визначення кореневої директорії для перетворення рядка URL в ім'я файлу. Зазвичай використовується на початку файлу. htaccess у вигляді: RewriteBase /
  • RewriteOptions - установка деяких спеціальних опцій для поточної конфігурації в контексті сервера або каталогу. Тут розглядати не будемо.
  • RewriteCond - це перед- умова для директиви RewriteRule. Одне RewriteRule може мати кілька RewriteCond. Має формат:

    RewriteCond что_сравніваем с_чем_сравніваем

    RewriteRule виконається тільки в тому випадку, якщо всі попередні директиви RewriteCond знаходиться в значенні True.
  • RewriteRule - команда перетворення URL. Має формат:

    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 - дуже времязатратний процес. Не допускайте таких налаштувань на сервері в продершене. Навіть на тестовому сервері налаштуйте логирование, отладьте перенаправлення, а потім поверніть настройки назад.

    Схожі статті