Ви напевно зустрічали в мережі термін «mod_rewrite». Для наших читачів, які не до кінця знайомі з цим модулем веб сервера Apache, а також для тих, хто взагалі перший раз про це чує – постараюся розповісти в цій публікації (в кількох частинах) детальніше про даному модулі.

Модуль mod_rewrite є програмним модулем веб сервера Apache (зверніть увагу, що він не буде виконуватися під іншими веб серверами!). Його первинна функція — маніпуляція дій з URL. Модуль дуже універсальний і різноманітний, тому я постараюся показати тут безліч реальних прикладів.

Mod_rewrite є чудовим модулем, який надає «заснований на правилах механізм динамічного зміни запитуваних URL-ів». Це дійсно потужний інструмент, і тому, його знання принципово важливо, якщо ви хочете стати справжнім веб майстром програмістом або веб. Не так принципово, чи будете ви використовувати його у своїй роботі, скільки важливо те, що ви знаєте, що він може робити, і зможете розповісти про це своєму босові, коли з’явиться бажання зробити що-небудь дивне з веб-сервером.

Однак треба бути дуже обережним і навіть прискіпливим при роботі з цим модулем! Деякі помилки, які Ви здатні допустити, можуть призвести до логічної петлі, завдаючи безперервну 100%-ую завантаження ценрального процесора (CPU).

Щоб не здаватися розлогим в міркуваннях, наведу деякі дуже прості приклади.

Перш, ніж ми зможемо приступити до роботи, Ви повинні будете перевірити, чи встановлений модуль на вашому веб-сервері або немає.

Є кілька способів перевірити це:

  • Запитати вашого системного адміністратора чи знає він (або вона) про наявність цього модуля на веб сервері. Вони дійсно повинні знати, але як показує практика – трапляються і не дуже тямущі сисадміни …
    Не напружуйте інших: якщо Ви використовуєте ваш веб-сервер з сотнями інших доменів, ваші дії можуть розбудити деяких сплячих собак, оскільки використання mod_rewrite завжди буде тягти за собою деяку збільшену завантаження ценрального процесора.
  • Перевірити ваш файл конфігурації Apache (httpd.conf), якщо Ви маєте до нього доступ. Один з можливих стандартних шляхів може бути:
    /etc/httpd/httpd.conf
    Однак, ваш шлях може очевидно відрізнятися від цього.
  • Перевірити роботу вашого сервера з наведеними нижче прикладами. Якщо сервер працює без помилок – mod_rewrite дійсно встановлений на вашій системі. Якщо ні, Ви отримаєте повідомлення, при запиті будь-якої web-сторінки з вашого сервера: «Внутрішня помилка сервера»
  • Також, Ви побачите такий запис у файлі «error.log»:
    «Invalid command ‘RewriteEngine’, perhaps mis-spelled or defined by a module not included in the server configuration».

    Тепер давайте копнемо глибше і подивимося перший практичний приклад.

    Припустимо, що Ви будете використовувати mod_rewrite тільки для вашого власного сайту, тобто не як узагальнену перехресне установку сервера.

    Для нашого прикладу слід використовувати файл .htaccess.

    файл .htaccess

    Для роботи цього методу, Ви повинні завантажити файл під назвою «.htaccess» (будь ласка, зверніть увагу на крапку на початку імені файлу!) в папку сервера, з якою Ви будете працювати. Це можна зробити через telnet або ftp. (Попередження: .htaccess повинен бути завантажений в «режимі ASCII», тобто не в бінарному режимі!)

    Якщо у Вас вже є файл «.htaccess», наприклад з наступними записами:

    Options Includes +ExecCGI
    AddType text/x-server-parsed-html .html

    просто додайте знизу наш зразок коду до вже існуючого (Важливо: редагуйте ваш файл .htaccess в ASCII-редакторі типу Notepad).

    Перші два записи запустять сам модуль:

    RewriteEngine on
    Options +FollowSymlinks

    Порада: запис «RewriteEngine off» скасує всі наступні команди. Це — дуже корисна особливість: замість необхідності коментувати всі наступні рядки – все, що Ви повинні зробити, це встановити «off».

    Якщо ваш системний адміністратор забороняє Вам використання «Options +FollowSymlinks», Ви не зможете обмежити використання mod_rewrite для окремих каталогів, замість цього зміни будуть діяти на весь сервер.

    Наступна необхідна запис — це:

    RewriteBase /

    «/» є кореневим (основним) URL. Якщо у Вас якийсь інший URL, Ви можете вказати це в даній директиві, однак «/» – зазвичай еквівалентно адресою «http://домен.ру».

    А тепер, панове, перейдемо до більш цікавим записам!

    Припустимо, що ви хочете захистити від несанкціонованого доступу ваш файл .htaccess. На деяких серверах Ви можете легко читати цей файл, просто вводячи URL наступного формату в полі адреси вашого браузера: http://www.domain.com/.htaccess – серйозне упущення захисту, так як зміст вашого .htaccess може показати важливу інформацію про установки і налаштування вашого сайту людині, яка знає як ці знання застосувати проти вас.

    Щоб блокувати цей доступ, запишемо наступне:

    RewriteRule ^.htaccess$ — [F]

    Це правило перекладається так:

    Якщо хтось пробує звертатися до файлу .htaccess, система має виробити код помилки «HTTP response of 403» або «403 Forbidden — You don’t have permission to access /.htaccess on this server».

    Конструкція ^.htaccess$ в цьому регулярному виразі означає:

    ^ – якір початку рядка
    $ – якір кінця рядка
    . – у регулярних виразах точка «.» позначає мета-символ і повинна бути захищена зворотним слешем (backslash), якщо Ви все-таки хочете використовувати саме фактичну точку.

    Ім’я файлу повинно бути розташоване точно між початковим і кінцевим якорем. Це буде гарантувати те, що тільки це певне ім’я файлу і ніяке інше, згенерує код помилки.

    [F] – спеціальний «забороняє» прапорець (forbidden).

    У цьому прикладі, файл «.htaccess» тепер буде складатися з таких рядків:

    RewriteEngine on
    Options +FollowSymlinks
    RewriteBase /
    RewriteRule ^.htaccess$ — [F]

    Якщо ми додамо наш код (на прикладах) до існуючого раніше файлу «.htaccess», то отримаємо наступну конструкцію:

    Options Includes +ExecCGI
    AddType text/x-server-parsed-html .html
    RewriteEngine on
    Options +FollowSymlinks
    RewriteBase /
    RewriteRule ^.htaccess$ — [F]

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