Во многих статьях встречал описание user friendly urls, но ни разу не было приведено простого и понятного примера реализации. В этой статье приведен такой пример.
Итак. Для начала приведу код примера, а далее подробно разберем все встречающиеся в нем функции.
<?php header("http/1.1 200 ok"); if(empty($_server['redirect_url'])) $p=array(); else { $url=$_server['redirect_url']; if($url[0]=='/') $url=substr($url, 1); if($url[strlen($url)-1]=='/') $url=substr($url, 0, -1); $url=explode('/', $url); $tmp=count($url)-1; if($tmp>0) { $p=array(); $j=0; for($i=0; $i<=$tmp; $i++) { if(!empty($url[$i])) { $p[$j]=$url[$i]; $j++; } } } else $p=array(); } ?>
php пример.
Теория. user friendly urls – технология, которая помогает избавится от некрасивых ссылок с параметрами (напр.:
Основы практики. Идея данной технологии проста. Это использование вместо стандартной страницы 404 специального срипта, который бы перенаправил (или сам вывел) запрашиваемое содержимое.
Пример. Посетитель вводит в браузере
В нашем примере рассмотрен как раз самые первые этапы: отправка заголовка и анализ url. Нашей целью будет превратить строку введенную посетителем в массив параметров.
Для отправки http заголовков в php служит функция «header». Ей мы и пользуемся в самом начале, отправляя заголовок «http/1.1 200 ok».
header(«http/1.1 200 ok»);
Далее мы проверяем на пустоту элемент супер-глобального массива «$_server». Это необходимо для того, что бы выяснить как обратились к скрипту. Например, Вы настраиваете свой веб-сревер что бы вместо страницы 404 он отображал index.php. Таким образом становятся возможными два варианта. Посетитель зашел по ссылке прямой ссылке
Следующим шагом мы присваиваем значение элемента «redirect_url» переменной «$url». Это делается для того, что бы была возможность в дальнейшем использовать этот элемент.
Готовим «$url» к обработке. Если первым символом в строке является слеш, то удаляем его. Это необходимо для того, что бы при набивке массива у нас не получалось первого пустого элемента («нарезка» массива будет производится по слешам).
if($url[0]==’/') $url=substr($url, 1);
Следующим шагом мы удаляем последний слеш в конце строки, если он есть.
if($url[strlen($url)-1]==’/') $url=substr($url, 0, -1);
Как видно для выделения подстрок в php используется функция «substr». Ей передаются три параметра:
переменная, из которой необходимо выделить подстроку
номер символа, с которого начинается выделяемая подстрока
номер последнего символа выделяемой подстроки
Если передать третий параметр, как отрицательное число, то отсчет будет производится с конца строки. Естественно, что функция возвращает нужную подстроку в случае удачи либо flase в противном случае.
Разделяй и властвуй.
Следующим шагом мы разделяем строку на элементы с помощью функции «explode». В качестве разделителя используем слеш. Как видно функции «explode» передается только два параметра:
переменная, которую надо разделить
разделитель по которому будет производится деление. Заметьте, что в качестве разделителя может использоваться не только один символ, а произвольная строка.
Функция возвращает массив полученный при разделении строки.
$url=explode(‘/’, $url);
Далее мы считаем количество элементов в массиве с помощью функции «count». Если у нас ноль элементов (массив пуст), то присваиваем нашему результирующему массиву параметров также пустой массив. Такая ситуация может сложиться только теоретически, но все же – береженого Бог бережет.
Рассматриваем ситуация, когда у нас больше нуля элементов. Тут все достаточно просто. В цикле мы проходимся по всему массиву и очередной элемент не пуст присваиваем ему соответствующий элемент результирующего массива. Звучит сложно, но как видно в это всего несколько строк кода.
$p=array(); $j=0; for($i=0; $i<=$tmp; $i++) { if(!empty($url[$i])) { $p[$j]=$url[$i]; $j++; } }
Итог.
Вот и все. Обработка закончена. В результате у нас получился массив с обработанным url. Так например, если посетитель зайдет по ссылке
$p[0]=”content”; $p[1]=”index.html”; Дальнейшая реализация user friendly urls уже зависит от того, какие другие технологии используются (mysql например).
Источник: internet-technologies.ru