Практически все популярные фреймворки используют концепцию «единой точки входа». Данный механизм имеет ряд преимуществ в разработке, и сопровождении проектов. Работает данная концепция таким образом: все запросы отправляемые пользователями перенаправляются в один файл, который в свою очередь занимается обработкой этих запросов, и возвращает результат обработки запроса. При этом достигается минимум избыточности кода, нет необходимости плодить кучу файлов для обработки запросов, удобная манипуляция динамическим контентом, гибкое управление 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.
Я бы добавил не
RewriteRule ^(.*)$ index.php?url_param=$1 [L]
а
RewriteRule ^(.*)$ index.php?url_param=$1 [L,QSA]
чтобы GET параметры работали.
Зачем много слов писать когда можно просто
RewriteEngine on
RewriteRule .* index.php [L]
этих двух строк хватить что бы перенаправлять все запросы на index.php
и написать нехитрую роутер и все