О web-разработке
и даже немного больше...

Концепция «единой точки входа»

Практически все популярные фреймворки используют концепцию «единой точки входа». Данный механизм имеет ряд преимуществ в разработке, и сопровождении проектов. Работает данная концепция таким образом: все запросы отправляемые пользователями перенаправляются в один файл, который в свою очередь занимается обработкой этих запросов, и возвращает результат обработки запроса. При этом достигается минимум избыточности кода, нет необходимости плодить кучу файлов для обработки запросов, удобная манипуляция динамическим контентом, гибкое управление URL-ами на сайте, и многое другое. Немного перечислив преимущества данной концепции можно рассказать о том, как это делается на практике.

Чтобы данный механизм начал работать, необходимо указать веб-серверу чтобы все запросы к какой либо директории сайта (как правило, к корневой) перенаправлялись в единую точку – скрипт, который будет выполнять дальнейшую обработку запроса. Приведенная здесь конфигурация актуальна для сервера Apache. В конфигурации веб-сервера Apache предусмотрена директива RewriteRule, которая относиться к модулю mod_rewrite.

Модуль mod_rewrite предоставляет возможность организовать различные механизмы перенаправления, выполняя преобразование URL на лету опираясь на определенные правила (с возможностью применения регулярных выражений).

Традиционно перенаправление настраивается в файле .htaccess, пример перенаправления:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url_param=$1 [L]
</IfModule>

Данная конфигурация укажет веб-серверу, чтобы тот перенаправлял все запросы на файл index.php, кроме того строка запроса будет находиться в GET переменной url_param, которую можно «распарить», и решать что делать дальше.

Рассмотрим назначение строк, указанных выше.

Строка включает использование ModRewrite (Модуль перенаправления):

RewriteEngine On

Строка указывает корневую директорию, начиная с которой вступает в действие перенаправление:

RewriteBase /

Здесь указанны условия перенаправления:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

При любом запросе (строчка ^(.*)$) идет перенаправление на указанный файл. Вся строка, идущая после домена, записывается в переменную $_GET[‘url_param’]:

RewriteRule ^(.*)$ index.php?url_param=$1 [L]

На самом деле данная концепция поможет вам в решении кучи задач, начиная от построения модели MVC, заканчивая управлением правами доступа к различным частям сайта. Рассмотренный здесь пример перенаправления прост, на практике могут использоваться перенаправления по сложнее, включая множество условий. В связи с этим для более комфортного использования рекомендуется почитать документацию по модулю mod_rewrite.

Опубликован: 02.01.2014 г.

См. также:

Преимущества и недостатки веб-серверов Nginx и Apache
Как включить сжатие GZip в Nginx?
Подробнее о логах в Apache
Ротация логов в Linux
Denwer в локальной сети
HTTP авторизация
Просмотр списка загруженных модулей Apache
httpd грузит процессор, что делать?

Комментарии

  1. Edward пишет:

    Я бы добавил не
    RewriteRule ^(.*)$ index.php?url_param=$1 [L]
    а
    RewriteRule ^(.*)$ index.php?url_param=$1 [L,QSA]

    чтобы GET параметры работали.

    1. Бауыржан пишет:

      Зачем много слов писать когда можно просто
      RewriteEngine on
      RewriteRule .* index.php [L]
      этих двух строк хватить что бы перенаправлять все запросы на index.php
      и написать нехитрую роутер и все

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта