Практично всі популярні фреймворки використовують концепцію «єдиної точки входу». Даний механізм має ряд переваг у розробці і супроводі проектів. Працює дана концепція таким чином: всі запити, надіслані користувачами перенаправляються в один файл, який в свою чергу займається обробкою цих запитів, та повертає результат обробки запиту. При цьому досягається мінімум надмірності коду, немає необхідності плодити купу файлів для обробки запитів, зручна маніпуляція динамічним контентом, гнучке управління URL-ами на сайті, та багато іншого. Трохи перерахувавши переваги даної концепції можна розповісти про те, як це робиться на практиці.

Щоб цей механізм почав працювати, необхідно вказати веб-сервера щоб всі запити до якоїсь директорії сайту (як правило, до кореневої) перенаправлялися в єдину точку – скрипт, який буде виконувати подальшу обробку запиту. Наведена тут конфігурація актуальна для сервера Apache. У конфігурації веб-сервера Apache передбачена директива RewriteRule, яка ставитися до модуля mod_rewrite.

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

Традиційно перенаправлення налаштовується у файлі .htaccess, приклад перенаправлення:

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

Дана конфігурація вкаже веб-сервера, щоб той перенаправляв всі запити на файл 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.

Додав: htmaker, 02.01.2014 р.
(3 голосів, середній: 3,33 з 5)

Завантаження…

Діліться з друзями:

См. також:


Детальніше про логах в Apache
Рубрика: Apache

Ротація логів в Linux
Рубрика: Apache, Linux

Denwer в локальній мережі
Рубрика: Apache, Інструменти

HTTP авторизація
Рубрика: Apache, Інф. безпека

Перегляд списку завантажених модулів Apache
Рубрика: Apache, Linux

httpd вантажить процесор, що робити?
Рубрика: Apache

Тестування сайту під навантаженням
Рубрика: Apache, Інструменти

Як створити SSL сертифікат на Apache для CentOS 6?
Рубрика: Apache, Linux

Заборона на пряме скачування файлів
Рубрика: Apache

Коментарі

  • Edward пише:
    15.03.2017 в 01:42

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

    щоб ОТРИМАТИ параметри працювали.

    Відповісти

  • Бауыржан пише:
    04.06.2017 у 17:01

    Навіщо так багато слів, коли можна писати просто
    RewriteEngine on
    RewriteRule .* index.php [L]
    цих двох рядків вистачити що б перенаправляти всі запити на index.php
    і написати нехитру роутер і все

    Відповісти