Модуль 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 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. Во второй части этой обучающей серии статей постараюсь объяснить использование различных условий в конфигурировании модуля.
Автор: Denveroid
Источник: SiteMaker.Ru

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • News2.ru
  • NewsLand.ru
  • del.icio.us
  • BobrDobr.ru
  • Ma.gnolia
  • Digg
  • Reddit
  • Technorati
  • Slashdot
  • Netscape
  • DZone
  • ThisNext
  • Furl
  • YahooMyWeb
Опубликовано в: Модули Apache Январь 6, 2007

30 Комментариев »

  1. Спасибо за статью!

    Комментарий от Уизи — Август 10, 2007 @ 1:31 pm

  2. А я-то парился! Надо было manual по модулям Apache читать! Большое спасибо.

    Комментарий от Daniel — Сентябрь 30, 2007 @ 2:37 pm

  3. действительно оч полезная статья. теперь хоть немного разобрался и что-то понял.
    спасибо!

    Комментарий от Ник — Октябрь 19, 2007 @ 9:23 am

  4. Я думал, что это я не могу понять про мод_реврайт, а это оказывается некоторые люди не умеют писать статьи. Спасибо ограомное!!!! Отличные статьи. После суток чтения разных страниц про этот модуль наконец нашёл ваш сайт.

    Комментарий от Petr — Февраль 3, 2008 @ 4:23 am

  5. Что означает “Options +FollowSymlinks” и почему её запрещают?

    Комментарий от Андрей — Март 14, 2008 @ 7:10 pm

  6. Options +FollowSymlinks
    Да мне тоже непонятна эта запись

    Комментарий от Виталий — Май 6, 2008 @ 5:35 pm

  7. Отличная статья! доступно и доходчиво!

    Комментарий от Admin — Июнь 18, 2008 @ 2:43 pm

  8. При выборе хостинга так же важно смотреть на мод-реврайт.

    Комментарий от Ellay — Сентябрь 25, 2008 @ 12:26 am

  9. FollowSymLinks означает разрешение перехода по символическим ссылкам

    Комментарий от r2112 — Сентябрь 27, 2008 @ 3:38 pm

  10. спасибо за статью, как раз с реврайтом собирался работать

    Комментарий от Никита — Ноябрь 7, 2008 @ 10:45 pm

  11. Никита а это подло с вашеи стороны

    Комментарий от Vladimir — Ноябрь 14, 2008 @ 4:44 pm

  12. статья хорошая, мне нравится :)

    Комментарий от nau — Ноябрь 20, 2008 @ 12:17 pm

  13. В принципе в начале не было проблем но на середине знастрял

    Комментарий от lbar — Ноябрь 28, 2008 @ 12:23 am

  14. Это введение затрагивает лишь основы, требуемые для того, чтобы работать с модулем mod_rewrite.

    Комментарий от автогонки — Декабрь 1, 2008 @ 4:39 am

  15. Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла и никакое другое, сгенерирует код ошибки.

    Комментарий от Анджела — Декабрь 2, 2008 @ 12:15 am

  16. Options +FollowSymlinks
    Да мне тоже непонятна эта запись

    Комментарий от Злата — Декабрь 6, 2008 @ 2:59 am

  17. Мне статья не очень понравилась.

    Комментарий от Дмитрий — Декабрь 12, 2008 @ 10:11 am

  18. Сайт полезный но мало информации.

    Комментарий от Дмитрий — Декабрь 13, 2008 @ 12:47 pm

  19. думал, что это я не могу понять про мод_реврайт, а это оказывается некоторые люди не умеют писать статьи. Спасибо ограомное!!!! Отличные статьи. После суток чтения разных страниц про этот модуль наконец нашёл ваш сайт.

    Комментарий от Карл — Январь 31, 2009 @ 8:29 pm

  20. FollowSymLinks означает разрешение перехода по символическим ссылкам

    Комментарий от Ипполит — Январь 31, 2009 @ 11:25 pm

  21. Options +FollowSymlinks
    Да мне тоже непонятна эта запись

    Комментарий от Марк — Февраль 2, 2009 @ 9:42 pm

  22. Options +FollowSymlinks
    Да мне тоже непонятна эта запись

    Комментарий от Анджела — Февраль 8, 2009 @ 6:46 pm

  23. Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла и никакое другое, сгенерирует код ошибки.

    Комментарий от Зарина — Февраль 8, 2009 @ 6:46 pm

  24. Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла и никакое другое, сгенерирует код ошибки.

    Комментарий от Инна — Февраль 13, 2009 @ 9:48 pm

  25. О mod. rewrite много нового узнал для себя, о запрещающем флажке вообще впервые слышу

    Комментарий от Аделина — Март 9, 2009 @ 2:03 pm

  26. Ада, просто в этой теме постоянно появляются дополнения. Надо периодически повышать уровень образования..

    Комментарий от Земфира — Март 30, 2009 @ 10:44 am

  27. А что за флажок? Тоже никогда не слышал о нем

    Комментарий от Пётр — Март 30, 2009 @ 10:44 am

  28. Если мой системный администратор запрещает мне использование Options +FollowSymlinks, могу ли я ограничить использование mod_rewrite для отдельных каталогов?

    Комментарий от Антон Toxa — Апрель 6, 2009 @ 1:19 pm

  29. А можно ли использовать mod_rewrite только для вашего собственного сайта, то есть не как обобщенную перекрестную установку сервера?

    Комментарий от Дмитрий Валерьевич — Апрель 10, 2009 @ 6:42 pm

  30. Прежде чем приступить к работе нужно ли проверять, установлен ли модуль на моём веб сервере или нет?

    Комментарий от Василий — Апрель 16, 2009 @ 12:58 pm

Оставить комментарий

You must be logged in to post a comment.

Работает на WordPress