Красивые адреса с mod_rewrite

Регистрация доменного имени, создание сайта, раскрутка сайта, поисковая оптимизация. Разработка дизайна, изменение уже готовых сайтов. Если вы уже пробовали делать сайт, но не получилось, то вам ко мне!
e-mail: sergey@adgreat.ru
Сергей 176093074176093074   skypeadgreat.ru
+7 [910] 123-34-81   Нижний Новгород
 
  Регистрация доменаСоздание сайтаРаскрутка сайтаСоветы и статьиПортфолиоНовости интернетапроверка тИЦ и PR  
 
 
Антикризисное предложение

Регистрация домена .ru - бесплатно
Создание сайта от 6 000 руб.
Система администрирования сайта - бесплатно
Хостинг от 2 000 руб./год
Поддержка сайта от 1 000 руб./мес.
Раскрутка сайта от 6 000 руб./мес.
 
Главная  »  Советы и статьи  »  Программирование  »  Apache

Красивые адреса с mod_rewrite



Рассмотрим различные способы применения mod_rewrite. Можно в разной степени полагаться на mod_rewrite в работе по преобразованию адресов. Директивы записываются в файл .htaccess директории, где необходимо выполнять преобразования. Самым простым способом преобразования было бы задание конкретной исходной и итоговой страницы:

RewriteEngine On
RewriteRule ^start.html$ index.php


Первая строчка с директивой RewriteEngine необходима для включения механизма преобразования (ее необходимо включать для каждого виртуального хоста, поскольку по умолчанию она не наследуется). Вслед за ней идет указание на то, что при запросе к файлу start.html необходимо выдавать результат работы index.php.

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

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

  • символы ^ и $ говорят о начале и об окончании строки. Чтобы указать на то, что с какой-то строки должно именно начинаться имя файла, необходимо поставить ^ в начале. Аналогично если речь идет о том, что какой-то строкой должно заканчиваться имя, в конце нужно поставить $.
  • диапазон символов задается квадратными скобками []. Чтобы указать, что на месте символа для выполнения условия должен находиться символ от A до F, то в квадратных скобках пишется A-F. Диапазоны можно указывать подряд; mod_rewrite проверит все символы из квадратных скобок и, если они совпадают с заданным именем файла, осуществит преобразование.
  • символ . означает любой символ, встречающийся в имени файла. По этой причине, если в имени должна встретиться настоящая точка (например, указано расширение файла), то она должна экранироваться символом (это видно на примере выше).
  • +, * указывают на повторяемость шаблона. Заключенные в квадратные скобки выражения говорят лишь об одном символе, встречающемся в имени, если за ними не идет никаких дополнительных модификаторов. Если же описанный диапозон должен характеризовать несколько символов, надо указать модификатор: + - символ встретится 1 или более раз; * - встретится 0 или более раз (то есть, описанный диапазоном символ может и вовсе отсутствовать).

Теперь рассмотрим пример, использующих многие из положений, описанных выше:

RewriteEngine On
RewriteRule ^[a-zA-Z_-]+/[0-9]+/*$ /index.php
RewriteRule ^[a-zA-Z_-]+/*$ /index.php

Здесь представлены два правила, определяющих преобразования, однако разбор непосредственно страниц сайта ложится на скрипт index.php, который будет приведен ниже. Первое правило заставляет преобразовать раздел сайта с цифровым подразделом (например, это может быть подкатегория или конкретная страница раздела). Второе говорит о странице раздела. При этом название раздела может быть написано латиницей, используя знак подчеркивания и дефис. АДрес может завершаться слешем.

Скрипт index.php, обрабатывающий эти запросы:

$uri=urldecode($REQUEST_URI);
if(ereg("^/([a-zA-Z_-]+)",$uri,$regs))
{
    $topic=$regs[1];
}
elseif(ereg("^/([a-zA-Z_-]+)/([0-9]+)",$uri,$regs))
{
    $topic=$regs[1];
    $page=$regs[2];
}

Итак, первая часть адреса, написанная латиницей, помещена в переменную $topic, а число - в $page. Теперь скрипт может выбрать из базы данных необходимые сведения по разделам.

Дополнительно могут использоваться и другие директивы. Например, директива RewriteBase задает начальный адрес для преобразований. Ее удобно использовать, если преобразования задействованы лишь на какой-то части сайта или существуют различные разделы сайта, где правила разные. Задайте стартовый адрес для преобразования:

RewriteBase /newsite

Директива RewriteCond задает условия, при которых должно выполняться преобразование. Блок RewriteCond идет перед последуюшим RewriteRule. Например, следующее преобразование будет выполнено только для браузера Mozilla - главная страница для такого браузера окажется mozilla.html:

RewriteCond  %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /mozilla.html


2009-01-28 11:56:19


Создание сайтаРаскрутка сайтаДизайн сайтаЭлектронные деньгиПрограммированиеJavaScriptPHPУчебник PHPПримеры скриптов на PHPВозникающие ошибкиCSSApacheHTMLРазноеПродвижение товаров




разное  
всякое