Модуль mod_rewrite ч.1

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

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

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

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

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

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

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

  1. Запитати вашого системного адміністратора - чи знає він (або вона) про наявність цього модуля на веб сервері. Вони дійсно повинні знати, але як показує практика - трапляються і не дуже обізнані сисадміни ...
    Чи не напружуйте інших: якщо Ви використовуєте ваш веб сервер з сотнями інших доменів, ваші дії можуть розбудити деяких сплячих собак, оскільки використання mod_rewrite буде завжди тягти за собою деяку збільшену завантаження ценрального процесора.
  2. Перевірити ваш файл конфігурації Apache (httpd.conf), якщо Ви маєте до нього доступ. Один з можливих стандартних шляхів може бути:
    /etc/httpd/httpd.conf
    Однак, ваш шлях може очевидно відрізнятися від цього.
  3. Перевірити роботу вашого сервера з нижченаведеними прикладами. Якщо сервер працює без помилок - 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 do not 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]
Options Includes +ExecCGI AddType text/x-server-parsed-html .html RewriteEngine on
Options +FollowSymlinks RewriteBase / RewriteRule ^.htaccess$ - [F]

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