Модуль mod_rewrite. Частина 1
Модуль 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 + FollowSymlinks. Ви не зможете обмежити використання mod_rewrite для окремих каталогів, замість цього зміни будуть діяти на весь сервер.
Наступна необхідний запис - це:
А тепер, панове, перейдемо до більш цікавим записам!
Щоб блокувати цей доступ, запишемо наступне:
Це правило перекладається так:
Якщо хтось пробує звертатися до файлу .htaccess. система повинна зробити код помилки "HTTP response of 403" або "403 Forbidden - You do not have permission to access /.htaccess on this server".
Конструкція ^ .htaccess $ в цьому регулярному виразі означає:
- ^ - якір початку рядка
- $ - якір кінця рядка
- . - в регулярних виразах точка "." позначає мета-символ і повинна бути захищена зворотним слешем (backslash), якщо ви все-таки хочете використовувати саме фактичну точку.
Назва файлу повинна бути розташована точно між початковим і кінцевим якорем. Це гарантуватиме те, що тільки це певне ім'я файлу і ніяке інше, згенерує код помилки.
- [F] - спеціальний "заборонний" прапорець (forbidden).
У цьому прикладі, файл .htaccess тепер буде складатися з таких рядків:
Якщо ми додамо наш код (в прикладах) до існуючого раніше файлу .htaccess, то отримаємо таку конструкцію:
Це введення зачіпає лише основи, необхідні для того, щоб працювати з модулем mod_rewrite. У другій частині цієї навчальної серії статей постараюся пояснити використання різних умов в конфігурації модуля.