Общие случаи использования mod_rewrite

Статус
В этой теме нельзя размещать новые ответы.

dotsenko

Постоялец
Регистрация
27 Дек 2006
Сообщения
236
Реакции
134
Как я уже говорил раньше, mod_rewrite используется для преобразования запросов к серверу вида Для просмотра ссылки Войди или Зарегистрируйся на Для просмотра ссылки Войди или Зарегистрируйся. Это преобразование выполняется с помощью простого правила записанного в .htaccess:


ewriteRule ^([A-Za-z]+)/([0-9]+)$ index.php?dir=$1&s=$2
адеюсь, это все усвоили. Переходим к более сложным преобразованиям. Но для начала перечислю основные принципы при составлении правил для mod_rewrite:
Сначала идет название метода (способа) преобразования:
RewriteRule
RewriteCond
RewriteMap
Переменные среды apache
Потом само правило (Perl-совместимое регулярное выражение)
И в конце дополнительные параметры:
NC – регистронезависимо (без учета регистра символов)
OR – или, т.е. если это условие не выполняется, проверяется следующее за ним.
L – проверка на символичность ссылки
U – проверка существования URL
F – проверка существования файла
od_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]
Для написания своего правила нужно немного:
Придумать, как должна выглядеть строка запроса в браузере
Реализовать это.
елается это очень просто, например, у вас есть сайт, на котором вы что-либо продаете. И вам и вашим клиентам было бы гораздо удобнее запоминать названия каталогов сайта, нежели переменные и их параметры. Поэтому предположим, что ваш будущий сайт должен иметь такую структуру:
-----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
еперь при запросах вида Для просмотра ссылки Войди или Зарегистрируйся будет вызываться Для просмотра ссылки Войди или Зарегистрируйся
Но можно поступить и по-другому:
ключаем возможности 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);
?>
И в результате выполнения скрипта мы получим все параметры, полученные при разбиении запроса. Например, запрос:
ttp://example.com/articles/category1/article12.htm
осле обработки скриптом в массиве $params будет содержаться следующее:
rray
(
[0] => articles
[1] => category1
[2] => 12.htm
)
дальше уже все просто, в зависимости от параметра [0] выбираем тот модуль, который нам нужен и грузим его.
родолжение следует. В следуещей части будут рассмотренны более конкретные случаи.
сли у вас есть вопросы или дополнения, или вы просто с чем-то не согласны пишите мне на gid87@mail.ru и заходите на мой сайт
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху