Linux по-російськи
Бібліотека сайту rus-linux.net
Технології - кумедна штука. Часом вам хочеться написати про щось, поділитися з ким-небудь своїми знаннями, але щоб зробити це, і зробити добре, ви відчуваєте, що потрібно пояснити ще масу технологій, що використовуються для забезпечення роботи того, про що ви збираєтеся написати.
Але ж щоб водити автомобіль, не обов'язково знати, як він працює, починаючи з основ фізики взагалі і закінчуючи його механікою, правда? Тому в даній статті ми не будемо торкатися того, що знаходиться "під капотом" модуля mod_rewrite. Замість цього ми зосередимося на питаннях його налаштування і використання.
Я не впевнений щодо інших дистрибутивів Linux, але в моїй Fedora сервер Apache відразу встановлюється з завантажуваних, але відключеним модулем mod_rewrite.
Щоб активувати його, просто додайте в httpd.conf наступний рядок:
Якщо ви використовуєте кілька віртуальних хостів на сервері, ви можете активувати mod_rewrite тільки для потрібних хостів.
Якщо при використанні регулярних виразів ви відчуєте себе не дуже впевнено, не хвилюйтеся - їх дуже просто освоїти. Щоб злегка спростити життя, mod_rewrite підтримує вбудоване протоколювання, щоб допомогти адміністратору в налагодженні правил.
Щоб активувати запис в лог-файл, додайте в конфігурацію наступні рядки:
По крайней мере, таким чином ви, приступаючи до роботи з цим модулем, будете готові до налагодження.
Чотири практичних прикладу
2. Сайт вашої компанії розміщується в двох доменах: www.yourcompany.com і www.yourcompany.net. Шеф, виконуючи пошук в Google, звернув увагу на те, що результати трактуються як відносяться до двох різних сайтів. Він хоче, щоб ви знайшли спосіб "пояснити" Google, що обидва домени слід розглядати як один сайт.
3. Припустимо, що у вас є веб-сайт, який підтримує як звичайні, так і захищені з'єднання (http і https), і ваш шеф вимагає, щоб ви забезпечили по можливості непомітне перенаправлення всього http-трафіку на https. Що ж, якщо ви використовуєте Apache з mod_rewrite. все, що вам потрібно зробити - це записати наступне правило:
огляд синтаксису
Директива RewriteCond дозволяє вам перевіряти певну умову, необхідне для застосування правила. Розглядайте його як оператор if в мовах програмування. Дві або більше директив RewriteCond. записані послідовно, розглядаються як об'єднані логічною операцією "І" (AND), а при використанні виразу [OR] в кінці рядка - як об'єднані операцією "АБО" (OR). Зверніть увагу, що RewriteCond досить гнучка і дозволяє вам перевіряти різні серверні змінні типу заголовків HTTP, параметри з'єднання, запит, внутрішню організацію сервера і навіть системну інформацію.
Директива RewriteRule - найбільш важлива з тих, які ви будете використовувати. Вона, як значиться в документації Apache, є "справжньою робочою конячкою" модуля mod_rewrite. Зазвичай вона приймає три параметри: шаблон зіставлення, рядок заміни і список прапорів. Нижче наводиться опис прапорів, використаних в прикладах вище:
- R - вказує на те, що виконується перенаправлення і, якщо ви явно не вказали код 301, буде використаний код повернення 302, що означає тимчасове переміщення.
- L - завершує ланцюжок правил; наступні правила не виконуються.
- NC - робить шаблон нечутливим до регістру символів.
- NE - забороняє в результуючому URI заміщати символи відповідними кодами (наприклад,% 20 замість пробілу).
висновок
Модуль Apache mod_rewrite - вельми гнучкий інструмент, що дозволяє системному адміністратору швидко вирішувати різні проблеми з веб-сервером. Деякі "коригування" можуть носити тимчасовий характер, поки не буде реалізовано відповідне постійне рішення, і, навіть незважаючи на те, що іноді mod_rewrite може бути частиною постійного рішення, не зловживайте наданими їм зручностями, оскільки правила mod_rewrite мають властивість дуже швидко накопичуватися, ускладнюючи супровід . Вам коли-небудь доводилося супроводжувати код на мові Perl, який використовує регулярні вирази? Якщо так, то ви, думаю, розумієте, що я хочу сказати.
На закінчення, якщо ви хочете докладніше дізнатися про те, що знаходиться "під капотом" mod_rewrite. прочитайте документацію Apache і при виникненні сумнівів користуйтеся можливістю mod_rewrite протоколювати свої дії, що допоможе вам у налагодженні ваших правил.