[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]







kritik2011
Ответов: 0
04-01-12 11:23



   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные



Web - программирование / .htaccess /

Псевдостатика (mod_rewrite)


Как и все пользователи интернета, я с некоторого времени (примерно год назад) стал замечать, что все больше и больше популярных сайтов переходят от url вида http://site.net?pid=general&id=5&s=98465 на псевдостатику или на ЧПУ (Человеку Понятный УРЛ), т.е. вместо http://site.net?pid=general&id=5&s=98465 в строке браузера будет что-то похожее на http://site.net/general/45/5/98465/. И я стал искать документацию о том, что пока не понимал. Нашел пару статей, в которых подобное делалось с помощью .htaccess и 404 ошибки, но это было не совсем то, что мне нужно и тогда мне случайно попалась документация по mod_rewrite.

mod_rewrite – это специальный модуль для серверов Apache, который был специально сделан для создания сайтов с ЧПУ. Он был написан в апреле 1996 года и эксклюзивно подарен The Apache Group в июле 1997. Модуль представляет собой библиотеку расширения для серверов типа Apache. Находится в папке modules, в корневой папке апача и называется обычно mod_rewrite.so (устанавливается отдельно). С помощью mod_rewrite можно всего парой строк в .htaccess сделать понятный для человека url. Для упрощения всех команд и правил этот модуль использует Perl-совместимые регулярные выражения. Например, при использовании следующего правила:


RewriteRule ^([A-Za-z]+)/([0-9]+)$ index.php?dir=$1&s=$2 [L]

Запрос вида http://site.net/shop/50/ будет рассматриваться сервером как http://site.net/index.php?dir=shop&s=50 и плюс ко всему контроль ввода значений, а это уже какая-никакая, но защита. Т.к. переменной dir может быть присвоено толь значение из латинских букв, исключая символы, а переменной s только целочисленные значения.

Для установки mod_rewrite вам нужно его сначала где-нибудь скачать, поищите в yandeks’е “mod_rewrite”, обязательно найдете. Затем, открываете папку с модулями апача, у меня это usr/local/apache/modules/ и копируете туда mod_rewrite.so. Затем заходите в папку usr/local/apache/conf/ и открываете httpd.conf, находите строчку #LoadModule rewrite_module modules/mod_rewrite.so и убираете #. Если такой строчки нет, то добавляете эту строчку в любое место. Затем ниже дописываете RewriteEngine On, для того, что бы это все работало. А что бы изменения вступили в силу вам необходимо перезапустить сервер.

Если у вас нет прав доступа к файлам apache, тогда обращайтесь к своему хостеру с просьбой или требованием (в случае если у вас платный хостинг) установить активировать модуль mod_rewrite.so.

И еще один совет на последок, прежде чем вносить изменения в httpd.conf, настоятельно рекомендую сделать его резервную копию, а то мало ли что.


Как я уже говорил раньше, mod_rewrite используется для преобразования запросов к серверу вида http://site.net/?dir=general&s=53 на http://site.net/general/53/. Это преобразование выполняется с помощью простого правила записанного в .htaccess:


RewriteRule ^([A-Za-z]+)/([0-9]+)$ index.php?dir=$1&s=$2

Надеюсь, это все усвоили. Переходим к более сложным преобразованиям. Но для начала перечислю основные принципы при составлении правил для mod_rewrite:

* Сначала идет название метода (способа) преобразования:

o RewriteRule

o RewriteCond

o RewriteMap

o Переменные среды apache

* Потом само правило (Perl-совместимое регулярное выражение)

* И в конце дополнительные параметры:

o NC – регистронезависимо (без учета регистра символов)

o OR – или, т.е. если это условие не выполняется, проверяется следующее за ним.

o L – проверка на символичность ссылки

o U – проверка существования URL

o F – проверка существования файла

Mod_rewrite предоставляет еще очень много чего интересного, например он может определять тип браузера и в зависимости от него выдавать нужную страницу:


RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*

RewriteRule ^/$ /homepage.max.html [L]

RewriteCond %{HTTP_USER_AGENT} ^Lynx.*

RewriteRule ^/$

/homepage.min.html [L]

RewriteRule ^/$ /homepage.std.html [L]

Для написания своего правила нужно немного:

1. Придумать, как должна выглядеть строка запроса в браузере

2. Реализовать это.

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

+-----example.com
|
|------------------articles/
| |------+-category1/
| |------+-category2/
|
|------------------hardware/
| |------+-hdd/
| |--------cd-rw/
| | |--------produkt1/
| | |-------- produkt2/
| |------+-……….
| |
| |------+-other/
|
|------------------about/

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


# Включаем возможности mod_rewrite

RewriteEngine On

# Создаем правила для разделов.

# Каждое ниже перечисленное правило строгое и в нем проверяется

# тип переменных, это нужно для защиты сайта от взлома

# Для разделов (категорий)

RewriteRule ^([A-Za-z]+)/$ index.php?module=$1

# Для разделов и подразделов

RewriteRule ^([A-Za-z]+)/([A-Za-z0-9]+)/$ index.php?module=$1&category=$2

# Для разделов, подразделов и идентификатора

RewriteRule ^([A-Za-z]+)/([A-Za-z0-9]+)/([A-Za-z0-9.]+)$ index.php?module=$1&category=$2&id=$3

Теперь при запросах вида http://example.com/articles/category1/article12 будет вызываться http://example.com/index.php?module=articles&category=category1& id=article12

Но можно поступить и по-другому:


# Включаем возможности mod_rewrite

RewriteEngine On

# Создаем правила для разделов

RewriteRule ^(.*)$ index.php [L,QSA]

В этом случае все входящие параметры должен будет обрабатывать index.php. Делается это так:


<?php

/* Функция для очистки массива от пустых строк */

function Clear_array($array)

{

$c=sizeof($array);

$tmp_array=array();

for($i=0; $i<$c; $i++)

{

if (!(trim($array[$i])==""))

{

$tmp_array[]=$array[$i];

}

}

return $tmp_array;

}

$param=$_SERVER['REQUEST_URI'];

$params=explode("/",$param);

$params=Clear_array($params);

?>

И в результате выполнения скрипта мы получим все параметры, полученные при разбиении запроса. Например, запрос:

http://example.com/articles/category1/article12.htm

после обработки скриптом в массиве $params будет содержаться следующее:


Array

(

[0] => articles

[1] => category1

[2] => 12.htm

)

А дальше уже все просто, в зависимости от параметра [0] выбираем тот модуль, который нам нужен и грузим его.

Продолжение следует. В следуещей части будут рассмотренны более конкретные случаи.




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / .htaccess /

Защита include-модулей от несанкционированного доступа на сайте
14-11-2009   

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

Кол. просмотров: общее - 1373 сегодня - 0

Псевдостатика (mod_rewrite). Часть 2
14-11-2009   

В предыдущей части статьи мы рассмотрели основные принципы работы mod_rewrite. В этой статье будут рассмотрены общие случаи использования mod_rewrite и его возможностей... подробнее

Кол. просмотров: общее - 1101 сегодня - 0

Псевдостатика (mod_rewrite). Часть 1
14-11-2009   

Эта статья была написана мной во время разработки нового движка для сайта. Как и все пользователи интернета, я с некоторого времени (примерно год назад) стал замечать, что все больше и больше популярных сайтов переходят от url вида http://site.net?pid=general&id=5&s=98465 на псевдостатику или на ЧПУ (Человеку Понятный УРЛ)... подробнее

Кол. просмотров: общее - 938 сегодня - 0

Файл .htaccess на службе у seo-оптимизатора
14-11-2009   

Во многих информационных материалах, которые мне когда-либо приходилось читать об этом служебном файле веб-сервера Apache, говорилось, в основном, о том, как правильно сконфигурировать сервер для качественной работы сайта... подробнее

Кол. просмотров: общее - 1345 сегодня - 1

Красивый URL
05-04-2009   

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

Кол. просмотров: общее - 1975 сегодня - 1



  © WWW.COMPROG.RU ® Все о программировании - 2009 | Designed and Powered by Zaipov Renat | Разное