|
|
В предыдущей части статьи мы рассмотрели основные принципы работы mod_rewrite. В этой статье будут рассмотрены общие случаи использования mod_rewrite и его возможностей.
Как я уже говорил раньше, 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:
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]
Для написания своего правила нужно немного:
Делается это очень просто, например, у вас есть сайт, на котором вы что-либо продаете. И вам и вашим клиентам было бы гораздо удобнее запоминать названия каталогов сайта, нежели переменные и их параметры. Поэтому предположим, что ваш будущий сайт должен иметь такую структуру:
+-----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] выбираем тот модуль, который нам нужен и грузим его.
Продолжение следует. В следуещей части будут рассмотренны более конкретные случаи.
Если у вас есть вопросы или дополнения, или вы просто с чем-то не согласны пишите мне на [email protected] и заходите на мой сайт https://wm-help.net/