×

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо войти под своим аккаунтом через форму на главной панели.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

  • Рубрики
  • Слайдер
  • Сайдбар
  • Подписка
  • Вниз
  • Вверх
×
  • Как сделать сайт с нуля своими руками (вводная часть)

    1. Причины создания пошаговой инструкции по разработке самописного сайта
    2. Тема создаваемого сайта
    3. В чем будет заключаться монетизация
    4. Функционал
    5. Этапы создания
    6. Текущее состояние создаваемого сайта

    Здравствуйте уважаемый посетитель!

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

    Причем чтобы такой интернет-ресурс был создан не на каком-нибудь стандартном шаблоне бесплатной СMS (Content management system - система управления контентом) типа WordPress, Drupal, Joomla и т.п., а заточенный под себя, с возможностью обеспечить ему должную безопасность и реализовать все свои индивидуальные потребности.

    Часто такие сайты, созданные под конкретные задачи на основе языка разметки веб-страниц HTML, стилей CSS и других инструментов веб-программирования (PHP, JavaScript и т.п.), называют самописными.

    Этой статьей начинается отдельная рубрика "Как сделать сайт с нуля своими руками", где на реальном примере, с предоставлением исходных материалов (программные коды, файлы и т.п.), будет показано, как действительно можно самостоятельно сделать рабочий сайт.

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

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

Самописный сайт своими руками!

Текущее состояние создаваемого сайта

Здесь можно посмотреть текущее состояние тестового самописного сайта, который создается в рамках цикла статей Сделай сайт с нуля своими руками.

Где в дополнительных материалах можно бесплатно скачать исходные файлы сайта с таблицами MySQL.

Вы здесь: Главная → Сборник статей → URL для людей → Преобразуем входящие ЧПУ с помощью модуля MOD_REWRITE


Автор: / Дата:

Преобразуем входящие ЧПУ с помощью модуля MOD_REWRITE

Здравствуйте уважаемый посетитель!

В прошлой статье мы преобразовали динамические ссылки в статические адреса с использованием человеко-понятных урлов (ЧПУ).

Сегодня сделаем обратные преобразования - из входящих ЧПУ с помощью модуля MOD_REWRITE получим обычные динамические URL. После чего, для проверки выполненных преобразований, используя PHP выведем соответствующие GET-параметры на HTML-страницу.

Таким образом, на этом этапе мы подготовим необходимые данные для дальнейшего формирования динамических страниц.

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

Содержание


  • Составляем шаблоны правила RewriteRule модуля MOD_REWRITE
  • Формируем динамические ссылки используя подстановку в RewriteRule
  • Вносим необходимые дополнения в файл '.htaccess'
  • Проверяем выполненные преобразования
  • Исходные файлы сайта

Составляем шаблоны правила RewriteRule модуля MOD_REWRITE


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

Конечно, с помощью функций PHP можно извлекать из адреса нужные текстовые фрагменты и выполнять его проверку на соответствие регулярным выражениям и дальше с этим работать. Но более логичный и простой способ - это использовать для такого преобразования правило RewriteRule модуля MOD_REWRITE веб-сервера Apache.

Ранее, при выполнении первого, наиболее простого способа применения ЧПУ, в предыдущей статье в разделе Перенаправляем запросы с ЧПУ на главную страницу сайта мы уже использовали модуль MOD_REWRITE. Где рассматривали довольно простой вариант применения в правиле RewriteRule аргументов, определяющих "шаблон" "подстановку" "флаг" для перенаправления всех запросов пользователей на главную страницу сайта.

Тогда в качестве шаблона использовалось регулярное выражение ^(.*)$, при котором правило RewriteRule должно выполняться для любых входящих ссылок. А вторым аргументом являлся адрес главной страницы (файл index.php).

Теперь же, для того, чтобы получить из входящих ЧПУ динамические адреса, необходимо в файле ".htaccess" изменить это правило. А если быть точнее, заменить его на несколько правил, в которых запросы будут обрабатываться для разных вариантов текущих URL.

В нашем случае необходимо создать правила для трех вариантов входящих ссылок:

  • при наличии в адресе ЧПУ трех элементов, разделенных знаком слеш "/", что соответствует максимальному количеству используемых GET-параметров;
  • при входящих ссылках с двумя параметрами;
  • при ссылках с одним параметром.

Количество правил определено из ранее установленного максимального уровня вложенности страниц равного 3. При его увеличении следует добавить и соответствующие правила.

При этом, в каждом правиле в случае совпадения с заданными шаблонами, запросы также должны перенаправляться по адресу "index.php". Но теперь при подстановке URL требуется выполнять преобразование входящего ЧПУ в обычную динамическую ссылку с применением GET-параметров.

Для того, чтобы более подробно это рассмотреть, составим правило RewriteRule для варианта ранее используемой ссылки с максимальным количеством параметров. А именно, преобразуем статическую ЧПУ-ссылку httρ://newsite.local/statyi/ugon-avtomobiley/statistika-ugonov-2016 в обычную динамическую httρ://newsite.local/index.php?section=statyi&rubric=ugon-avtomobiley&page=statistika-ugonov-2016.

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

Конечно, тема регулярных выражений заслуживает отдельного внимания. И для большего понимания, наверное, следует более подробно ознакомиться с теорией этого вопроса из специально предназначенных для этого источников. Тем более, что в интернете можно найти большое количество описаний синтаксиса этих выражений. Например, уже упомянутый раздел Модуль Apache mod_rewrite одного из интернет-ресурсов.

скриншот 11

Здесь же при практическом применении правила RewriteRule мы остановимся на тех моментах, которые касаются нашего примера.

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

Для увеличения / уменьшения размера изображения кликните по картинке
Преобразование входящих ЧПУ с помощью модуля MOD_REWRITE, картинка 1

Рис.1 Создание шаблона в правиле RewriteRule

Как видно шаблон состоит из начала строки - символ "^", конца строки - знак доллара "$", слеш "/", разделяющий ссылку на элементы и трех регулярных выражений для каждой части адресной строки.

Сначала разберем регулярное выражение для первой группы шаблона - ([A-Za-z0-9-]+).

Будем исходить из того, что в этом фрагменте могут быть использованы только символы латинского алфавита обоих регистров, цифры и знак тире. Такое ограничение возможных символов обеспечит фильтрацию ошибочных ссылок при обработке текущих URL. Так как для реальных ЧПУ в этой части адресной строки достаточно будет использовать только указанные символы, а при наличии каких-либо других, такие ссылки будут игнорироваться.

Теперь рассмотрим символы, которые используются в этом выражении.

  • ( ) - выделение группы символов;
  • [ ] - определение класса символов - все, что находится в скобках являются допустимыми символами;
  • A-Z - все заглавные буквы латинского алфавита;
  • a-z - все прописные буквы латинского алфавита;
  • 0-9 - все цифры от 0 до 9;
  • - - знак тире.
  • + - относится к квантификаторам (кванторам), определяющим количественное соотношение предшествующих символов. В данном случае + означает, что может присутствовать один или любое другое количество символов. В иных случаях могут быть применены другие кванторы, такие как:
  • ? - 0 или 1 символ из предшествующего текста;
  • * - 0 или любое количество символов из предшествующего текста.

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

Теперь рассмотрим символы, которые используются в регулярном выражении во второй части шаблона - ([^/]+).

Здесь все значительно проще. Указывается только то, что в этом выражении исключается знак слеш "/". Это обусловлено тем, чтобы исключить использование знака, совпадающего с разделительным символом.

А для этого используется класс символов вида [^символы исключения], означающий, что шаблон не должен содержать символы, следующие за знаком "^". В данном случае в этой части шаблон не должен содержать слеш "/".

Что же касается используемого здесь знака "+", то как было ранее отмечено, это означает, что в этой группе может быть 1 или любое другое количество символов.

С последней группой (.*) еще проще. Тем более, что такое регулярное выражение мы уже использовали ранее при перенаправлении всех запросов на главную страницу.

Это выражение означает, что в соответствующем фрагменте адресной строки может иметь место любое количество любых символов, либо отсутствовать, где:

  • . - любой одиночный символ;
  • * - означает, что символ может присутствовать неограниченное число раз, либо отсутствовать;

Третий аргумент директивы RewriteRule, а именно - флаг [L] ("last" последнее правило), который ранее мы уже использовали, предназначен для остановки выполнения остальных правил. Что является совершенно логичным в этом наборе директив модуля MOD_REWRITE.

Таким образом мы рассмотрели все используемые в данном шаблоне символы. Что касается синтаксиса регулярных выражений, можно еще добавить возможность экранирования символов.

Например, если требуется использовать в группах такие символы, как: ". [ ] ( ) ? >" в качестве их прямого значения, а не в составе каких-либо синтаксических конструкций, то перед таким символами следует применять знак обратный слеш "\".

И последнее, и очень важное, это то, что найденные соответствия в каждой группе будут возвращаться в отдельных переменных $1,$2 и т.д. по количеству групп. И именно значения этих переменных будут использоваться в последующих преобразованиях в строке подстановки правила RewriteRule. На рис.1 это выделено отдельным фрагментом.

В нашем случае:

  • группа ([A-Za-z0-9-]+) соответствует переменной S1;
  • ([^/]+) - S2;
  • (.*)$ - S3.

И теперь, получив эти переменные перейдем к формированию динамической ссылки.

Формируем динамические ссылки используя подстановку в RewriteRule


Формирование строк подстановки правила RewriteRule значительно проще, чем написание регулярных выражений шаблонов. Для нашего случая достаточно будет лишь составить обычную динамическую ссылку. С той лишь разницей, что здесь вместо конкретных значений GET-параметров будут применяться значения ранее полученных переменных $1,$2 и $3, как показано на рис.2.

Для увеличения / уменьшения размера изображения кликните по картинке
Преобразование входящих ЧПУ с помощью модуля MOD_REWRITE, картинка 2

Рис.2 Формирование динамической ссылки в строке подстановки правила RewriteRule

Наверное, здесь комментарии излишни. Поэтому сразу перейдем к следующему этапу преобразований.

Вносим необходимые дополнения в файл '.htaccess'


Ниже показан код файла ".htaccess", с помощью которого на основе полученного выше правила RewriteRule будут выполняться преобразования из статических ЧПУ в динамические ссылки (как обычно строки с изменениями выделены более светлым фоном).

  1. AddDefaultCharset UTF-8

  2. RewriteEngine on

  3. RewriteCond %{REQUEST_FILENAME} !-d

  4. RewriteCond %{REQUEST_FILENAME} !-f

  5. RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/(.*)$ index.php?section=$1&rubric=$2&page=$3 [L]

  6. RewriteCond %{REQUEST_FILENAME} !-d

  7. RewriteCond %{REQUEST_FILENAME} !-f

  8. RewriteRule ^([A-Za-z0-9-]+)/([^/]+)$ index.php?section=$1&rubric=$2 [L]

  9. RewriteCond %{REQUEST_FILENAME} !-d

  10. RewriteCond %{REQUEST_FILENAME} !-f

  11. RewriteRule ^([A-Za-z0-9-]+)$ index.php?section=$1 [L]]

Рис.3 Преобразование в файле ".htaccessс" входящих ЧПУ в обычные динамические ссылки

Здесь в строках 5,8.11 присутствуют правила для вариантов ссылок с разным количеством параметров - с тремя, который мы рассматривали выше (поз.5), с двумя без параметра page(поз.8) и с одним параметром section(поз.11).

А в строках 3,4,6,7,9,10 применены директивы RewriteCond, определяющие условия при которых могут выполняться следующие за ними правила RewriteRule.

Так как условия RewriteCond влияют только на одно следующее за ними правило, то они должны здесь повторяться перед каждым правилом.

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

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

Проверяем выполненные преобразования


Как известно переданные серверу параметры динамических ссылок находятся в суперглобальной переменной $_GET, представляющей ассоциативный массив. Где ключами являются наименования параметров, а элементами массива - их значения.

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

  1. <?php

  2. //Вывод GET-параметров в суперглобальной переменной $_GET

  3. print_r ($_GET);

  4. ?>

Рис.4 Вывод суперглобальной переменной $_GET

Если теперь открыть страницу "Статистика угонов", адрес которой имеет максимальное количество параметров, то в ее верхней части можно увидеть содержимое переменной $_GET. Где будут отображены ключи и значения элементов массива в виде - [section] => statyi, [rubric] => ugon-avtomobiley и [page] => statistika-ugonov-2016.

Для увеличения / уменьшения размера изображения кликните по картинке
Преобразование входящих ЧПУ с помощью модуля MOD_REWRITE, картинка 3

Рис.4 Вывод GET-параметров в суперглобальной переменной Array

Таким образом мы убедились в том, что переданные серверу значения GET-параметров соответствует тем, которые были сформированы при преобразовании статических ЧПУ в обычные динамические ссылки в правиле RewriteRule в файле ".htaccess".

И теперь нам осталось только извлечь их из массива $_GET и использовать для формирования соответствующих динамических страниц. Что мы и сделаем в следующей статье.

Исходные файлы сайта


Знак папкиИсходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:

  • Файлы каталога www
  • Таблицы базы данных MySQL

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо войти под своим аккаунтом через форму на главной панели.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

С уважением, Николай Гришин


Комментарии


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

Буду Вам за это очень признателен!

comments powered by HyperComments