Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Perl / Полезная информация /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Модуль mod_rewrite. Часть 4. - Программирование от RIN.RU
Модуль mod_rewrite. Часть 4.

В этой публикации мы затронем те директивы, которые не успели охватить в предыдущих частях. Эти директивы не поддаются определению на уровне директорий. Это означает то, что вы должны иметь доступ к файлу конфигурации веб сервера Apache (httpd.conf).


Обычно такой доступ имеют пользователи "root" или администратор сервера.


Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи:


RewriteLog /usr/local/apache/logs/mod_rewrite_log
RewriteLogLevel 1


Эту строку нужно вписать в 'Раздел 2: Конфигурация основного сервера' в файле httpd.conf, а не в .htaccess!


Все манипуляции, произведенные mod_rewrite будут записываться в этот файл. Имя лог файла может быть любым. Вы можете указать абсолютный или относительный (относительно ServerRoot) путь к файлу.


Если вы хотите вести разные лог файлы для различных виртуальных хостов, то нужно ввести изменения в 'Раздел 3: Виртуальные сервера', например так:


ServerAdmin webmaster@yourdomain.com
DocumentRoot /usr/www/htdocs/yourdomain
ServerName yourdomain.com
RewriteLog /usr/apache/logs/yourdomain_mod_rewrite_log
RewriteLogLevel 1


RewriteLogLevel может быть определен в пределах диапазона от 1 до 8. Обычно достаточно первого уровня. Более высокие уровни используются для деббагинга.


Другая директива, которая является очень удобной в целях клоакинга - это так называемая карта перезаписи. Это - файлы, содержащие пары ключ/значение, обычно в формате текстового файла:


cde2c920.infoseek.com spider
205.226.201.32 spider
cde2c923.infoseek.com spider
205.226.201.35 spider
cde2c981.infoseek.com spider
205.226.201.129 spider
cde2cb23.infoseek.com spider
205.226.203.35 spider


Ключи, как вы видите, имена хостов или IP адреса. В этом простеньком примере значение всегда одно - 'spider'. Естественно, в реальном файле значения будут другие. Эта директива может быть записана в второй ('Конфигурация основного сервера') или третий ('Виртуальные сервера') раздел файла httpd.conf:


RewriteMap botBase txt:/www/yourdomain/spiderspy.txt


'Карта перезаписи' возымеет эффект на весь сервер.


Также, в файл .htaccess записывается:


RewriteCond ${botBase:%{REMOTE_HOST}} =spider [OR]
RewriteCond ${botBase:%{REMOTE_ADDR}} =spider
RewriteRule ^(.*).htm$ $1.htm [L]
RewriteRule ^.*.htm$ index.html [L]


Данные условия будут производить системную проверку: произведен ли запрос поисковиком. С этой целью производится поиск по файлу spiderspy.txt. Если ключ найден, будет возвращено значение 'spider', а 'условие' будет являться истинным.


Затем выполняется первый RewriteRule. Это означает то, что запрашиваемая '.htm' страница будет отдана поисковику. Переменная $1 равна части в круглых скобках '^(. *).htm$', то есть имя файла останется тем же самым.


Если же URL вызван обычным посетителем, то применяется второе 'правило': пользователь будет перенаправлен на страницу 'index.html'.


Поскольку '.htm' страницы будут читаться только 'пауками', они могут быть оптимизированы соответственно для поисковых серверов. Вы можете также использовать файл в формате 'dbm' вместо обычного текстового файла. Бинарный формат данных позволяет ускорить поиск, который является особенно важным, если вы работаете с очень большими списками поисковиков. Пример, данный выше, предлагает простые функциональные возможности клоакинга. Все обычные посетители будут всегда переадресовываться к странице 'index.html' и не будет вестись никаких логов файлов вне логов mod_rewrite.


Можно заменить несколько строчек кода php (perl и т.д.) в ваших приложениях, используя всего одну-две строки mod_rewrite. Последний пример проиллюстрирует это более подробно.


Цель - показать посетителям 'фото дня'. Посетитель, кликнувший по ссылке http://yoursite.com/pic.html увидит лучшую фотографию или картинку дня, и так каждый день. Мы будем работать с серверными переменными:


TIME_MON
TIME_DAY



Поместим в файл .htaccess одну единственную строку:


RewriteRule ^pic.html$ pic-%{TIME_MON}-%{TIME_DAY}.html


Запрашиваемый URL будет перезаписан, например:


pic-08-28.html
pic-08-29.html
pic-08-30.html
и так далее.


Теперь, все что вы должны сделать - это единожды загрузить файлы с соответсвующими именами и забыть о ежедневном обновлении ссылки. Переменные времени также могут использоваться для другой периодичности.


Это был последний пример в серии публикаций о замечательном модуле mod_rewrite. Естественно невозможно было затронуть все нюансы, директивы, переменные и т.д. в данной публикации, целью было другое - дать общее представление и понимание основ, и так сказать 'ввести в курс дела'.



 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь