Чтение RSS каналов

Статьи

Статьи

Категории

Устройство
Устройство
Обучающее руководство
Темы
Темы
Оформление и компоненты дизайна
Модули
Модули
Использование и изготовление модулей
Блоки
Блоки
Использование и изготовление блоков
Документация
Документация
Описание функций и модулей
Информация
Информация
Полезная информация для администратора

Общее количество: 59 страниц в 8 категориях

Изучаем модуль mod_rewrite - Часть 3

Полезная информация для администратора

В двух предыдущих частях мы познакомились с основами «правил перезаписи» URL и «условиями правил». Позвольте предложить к рассмотрению два примера, иллюстрирующих более сложные приложения. Первый пример имеет дело с динамическими страницами, а второй показывает возможности вызова «.txt» файлов и произведение различных действий над ними.

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

http://www.yoursite.com/cgi-bin/shop.cgi?product1
http://www.yoursite.com/cgi-bin/shop.cgi?product2
http://www.yoursite.com/cgi-bin/shop.cgi?product3

Эти адреса представлены как ссылки на большинстве страниц сайта.

А теперь допустим, что вы решили добавить сайт для индексации в поисковые системы. Тут вас поджидает небольшая неприятность – не все поисковики принимают, понимают и индексируют URL, в которых содержится символ «?».

Более естественным и приемлемым для поисковика является URL вида:

http://www.yoursite.com/cgi-bin/shop.cgi/product1

В данном случае символ «?» заменяется на «/».

Еще более комфортабельный URL с точки зрения поисковика будет иметь вид:

http://www.yoursite.com/shop/product1

Для поисковика, «shop» теперь как-бы является директорией, содержащей товары product1, product2 и т.д.

Если пользователь, со страницы результатов запроса в поисковике проследует по такой ссылке, то эта ссылка должна будет трансформироваться в ссылку: shop.cgi?product1.

Чтобы добиться такого эффекта можно использовать mod_rewrite, используя следующую конструкцию в файле .htaccess:

RewriteEngine on<br /> Options +FollowSymlinks<br /> RewriteBase /<br /> RewriteRule ^(.*)shop/(.*)$ $1cgi-bin/shop.cgi&#063;$2


Переменные $1 и $2 составляют так называемые "backreferences". Они связаны с текстовыми группами. Вызываемый URL разбивается на части. Все, что находится перед «shop», плюс все что находится после «shop/» определяется и хранится в этих двух переменных: $1 и $2.

До этого момента, наши примеры использовали «правила» типа:

RewriteRule ^.htaccess*$ - [F]


Однако мы еще не достигли истинной перезаписи URL адресов, в смысле того, что один URL должен перенаправлять посетителя на другой.

Для нашей записи вида:

RewriteRule ^(.*)shop/(.*)$ $1cgi-bin/shop.cgi&#063;$2


применяется общий синтаксис: RewriteRule текущийURL перезаписываемыйURL

Как видите, эта директива выполняет действительную «перезапись» URL адреса.

В дополнение к записям в файл .htaccess, нужно еще заменить все ссылки на сайте, которые имеют формат «cgi-bin/shop.cgi?product», на ссылки вида: «shop/product»

Теперь, когда поисковик найдет страницу с подобными ссылками, он проиндексирует сайт без всяких видимых проблем.

Таким образом вы можете превратить чисто динамический сайт в сайт, имеющий статическую структуру, что явно принесет пользу в вопросе индексирования различными посковыми машинами. Обратите внимание на вид URL адресов на данном сайте. Вдобавок ко всему, они имеют еще и легкочитамую для человека структуру - ЧПУ (человекопонятный УРЛ). Но об этом мы поговорим в другой статье.

В нашем втором примере мы обсудим, как переадресовать запросы «.txt» файлов к сценарию программы.

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

Однако, относительно запросов к файлу «robots.txt», предпочтительно иметь доступ ко всем этим данным, чтобы иметь больше информации о посещении поисковиков, чем просто знать их IP адреса. Для того, чтобы оганизовать это, в «.htaccess» должны быть следующие записи:

RewriteEngine on<br /> Options +FollowSymlinks<br /> RewriteBase /<br /> RewriteRule ^robots.txt$ /text.cgi&#063;%{REQUEST_URI}


Теперь при запросе файла «robots.txt» наш RewriteRule переадресует посетителя (робота) к обрабатывающему запросы скрипту text.cgi. Кроме того, переменная передается скрипту, которая будет обработана в соответствии с вашими нуждами. «REQUEST_URI» определяет имя запрашиваемого файла. В данном примере это – «robots.txt». Скрипт прочтет содержание «robots.txt» и отправит его web-браузеру или роботу поискового сервера. Таким образом, мы можем считать хиты посетителей и вести свои лог-файлы.

С этой целью, скрипт будет использовать переменные окружения «$ENV {'HTTP_USER_AGENT'}» и т.д. Это обеспечит получение всей требуемой информации. Вот исходный текст для сценария cgi, упомянутого выше (пример взят с сайта http://fantomaster.com):

#!/usr/bin/perl<br /> # If required, adjust line above to point to Perl 5.<br /> #################################<br /> # (c) Copyright 2000 by fantomaster.com #<br /> # All rights reserved. #<br /> #################################<br /> <br /> $stats_dir = &quot;stats&quot;;<br /> $log_file = &quot;stats.log&quot;;<br /> <br /> $remote_host = &quot;$ENV{&#039;REMOTE_HOST&#039;}&quot;;<br /> $remote_addr = &quot;$ENV{&#039;REMOTE_ADDR&#039;}&quot;;<br /> $user_agent = &quot;$ENV{&#039;HTTP_USER_AGENT&#039;}&quot;;<br /> $referer = &quot;$ENV{&#039;HTTP_REFERER&#039;}&quot;;<br /> $document_name = &quot;$ENV{&#039;QUERY_STRING&#039;}&quot;;<br /> <br /> open (FILE, &quot;robots.txt&quot;);<br /> @TEXT = ;<br /> close (FILE);<br /> <br /> &amp;get_date;<br /> <br /> &amp;log_hits<br /> (&quot;$date $remote_host $remote_addr $user_agent $referer $document_name<br /> &quot;);<br /> <br /> print &quot;Content-type: text/plain<br /> <br /> &quot;;<br /> print @TEXT;<br /> <br /> exit;<br /> <br /> sub get_date {<br /> ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime();<br /> $mon++;<br /> $sec = sprintf (&quot;%02d&quot;, $sec);<br /> $min = sprintf (&quot;%02d&quot;, $min);<br /> $hour = sprintf (&quot;%02d&quot;, $hour);<br /> $mday = sprintf (&quot;%02d&quot;, $mday);<br /> $mon = sprintf (&quot;%02d&quot;, $mon);<br /> $year = scalar localtime;<br /> $year =~ s/.*&#063;(d{4})/$1/;<br /> $date=&quot;$year-$mon-$mday, $hour:$min:$sec&quot;;<br /> }<br /> <br /> sub log_hits {<br /> open (HITS, &quot;&gt;&gt;$stats_dir/$log_file&quot;);<br /> print HITS @_;<br /> close (HITS);<br /> }


Загрузите файл с данным содержимым в корневую или в DocumentRoot директорию сервера и установите права доступа у файлу (chmod) 755. Затем, создайте каталог «stats». Более детальное описание о том, как установить скрипт вы можете получить на сайте разработчика.

Если настройки вашего сервера не позволяют исполнять cgi-сценарии в главной директории (DocumentRoot), то попробуйте следующий вариант:

RewriteRule ^robots.txt$ /cgi-bin/text.cgi&#063;%{REQUEST_URI}


Обратите внимание, что в этом случае, будет необходимо изменить пути в коде скрипта!

Наконец, вот решение задачки, данной в предыдущей части этой публикации:

RewriteCond %{REMOTE_ADDR} ^212.37.64<br /> RewriteRule ^.*$ - [F]


Если мы пишем в регулярном выражении «^212.37.64» вместо «^212.37.64.» (с точкой в конце), то даст ли это тот же самый эффект, и будут ли исключены те же самые IP адреса?

Регулярное выражение ^212.37.64 удовлетворяет и применимо к следующим строкам:

212.37.64
212.37.640
212.37.641
212.37.64a
212.37.64abc
212.37.64.12
212.37.642.12

Следовательно, последняя цифра «4» может сопровождаться любой символьной строкой. Однако, максимальным значением IP является адрес 255.255.255.255 – который подразумевает, что например 212.37.642.12 – неправильный (недопустимый) IP. Единственный допустимый IP в вышеприведенном списке – 212.37.64.12!

Автор статьи: Denveroid
Источник: sitemaker.ru

3.11
9
Назад

Дополнительно по данной категории

Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь