Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Fedor92
Человек из 90-х
Эксперт HTML/CSS
2806 / 2376 / 1030
Регистрация: 15.12.2012
Сообщений: 8,816
Записей в блоге: 4
1

Принцип работы ЧПУ

07.11.2018, 11:56. Просмотров 825. Ответов 9

Доброго времени суток, кибербратья и киберсёстры! Давеча разговаривал с одним из начинающих веб-разработчиков, который реализует самописный движок на php... Так вот у него возник вопрос, как apache, взаимодействуя с движком обрабатывает "красивые ссылки", которые пользователь вводит в адресную строку... Теоретически, мне удалось объяснить ему основы взаимодействия браузера, движка и сервера, но все мои аргументы закончились после того, как он попросил меня привести пример кода, который отвечает за подмену переменной окружения $_SERVER['REQUEST_URI'], которая используется для идентификации запроса в большинстве CMS. Затем при запросе страницы по ЧПУ в CMS попадает обычный URL, по которому движок сайта возвращает соответствующий ему контент. Есть ли у кого-то заготовочка подобного кода? Или может есть какие-то источники где популярным языком объясняется реализация подобного функционала? Заранее благодарен за ответы, особенно полезные!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2018, 11:56
Ответы с готовыми решениями:

Принцип работы MVC
Добрый вечер! Уже часов 8 пытаюсь понять технологию MVC (Model-View-Controller). Прочитал много...

Фотогалерея. Принцип работы.
Доброго времени суток всем! Есть такая задача, с которой бьюсь уже не одну неделю. Как сделать...

Принципы работы ЧПУ на сайте (mod_rewrite)
http://www.cyberforum.ru/php-beginners/thread1575728.html Как инклюдить такую html страницу? Не на...

Принцип работы онлайн игры
Здравствуйте. Меня интересует такой вопрос. Для примера возьмем браузерную игру "Дурак". Каким...

скрипт для загрузки видео на сайт, похожий принцип работы как в контакте и youtube
Здравствуйте. Я работаю над созаднием сайта на Drupal 7. И столкнулся с такой ситуацией, мне нужно...

9
Jewbacabra
Эксперт PHP
3511 / 2918 / 1304
Регистрация: 24.04.2014
Сообщений: 8,871
07.11.2018, 12:14 2
REQUEST_URI никто не подменяет. Самый адекватный вариант это настроить веб серверу все запросы кроме статики отдавать в точку входа, и уже там в зависимости от REQUEST_URI вести обработку запроса. Еще бывает менее адекватный вариант по-прежнему с единой точкой входа, но передачей урл через какой-либо get параметр (вроде у wp так, но точно не помню). И примитивный вариант без единой точки входа с разбором каждого типа урл и выделением из него параметров отдельно.
1
Fedor92
Человек из 90-х
Эксперт HTML/CSS
2806 / 2376 / 1030
Регистрация: 15.12.2012
Сообщений: 8,816
Записей в блоге: 4
07.11.2018, 12:22  [ТС] 3
Цитата Сообщение от Jewbacabra Посмотреть сообщение
REQUEST_URI никто не подменяет.
Подменяют... Есть даже скрипт, который был разработан одной из девелоперских компаний для сеопродвиженцев... Здесь интересует такой момент: допустим на сайте site.com есть раздел новостей имеющий адрес site.com/news... Мы вводим данный адрес в строку броузера, отправляем запрос на сервер... Как движок определяет по адресу строки, какую именно страницу подгрузить и какой шаблон подцепить для её загрузки... Опять же, если берём вордпресс, в котором адреса красивых страниц хранятся в БД, а не передаются параметром... Как движок идентифицирует страницу при загрузке?
0
Jewbacabra
Эксперт PHP
3511 / 2918 / 1304
Регистрация: 24.04.2014
Сообщений: 8,871
07.11.2018, 12:42 4
Fedor92, ты видел код с "подменой" или это разработчики так на словах называют. С апачем давно не работал, но насколько помню при apache + mod_php при внутренних редиректах REQUEST_URI не меняется. Используя nginx + php-fpm это сделать можно, но нн нужно.

Чтобы определить какую страницу показать в зависимости от урл, эту логику и надо реализовать на php. Самый примитивный вариант
PHP
1
2
3
4
5
6
7
8
$uri = $_SERVER['REQUEST_URI'];
if ($uri === '/news') {
    show_news_page();
} elseif ($uri ==='/admin') {
    show_admin_page();
} else {
    show404();
}
Именно так конечно никто не делает, логика обычно сложнее, из урл нужно выделять различные параметры, но суть примерно такая.
0
Fedor92
Человек из 90-х
Эксперт HTML/CSS
2806 / 2376 / 1030
Регистрация: 15.12.2012
Сообщений: 8,816
Записей в блоге: 4
07.11.2018, 12:56  [ТС] 5
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Fedor92, ты видел код с "подменой" или это разработчики так на словах называют.
Разработчики... Я создал тему для того, чтобы выслушать все мнения, поскольку эта часть анонса скрипта:
подмену переменной окружения $_SERVER['REQUEST_URI'], которая используется для идентификации запроса в большинстве CMS. Затем при запросе страницы по ЧПУ в CMS попадает обычный URL, по которому движок сайта возвращает соответствующий ему контент.
меня собственно и заинтересовала...

Цитата Сообщение от Jewbacabra Посмотреть сообщение
Чтобы определить какую страницу показать в зависимости от урл, эту логику и надо реализовать на php.
С этим кодом тоже всё ясно, как пять копеек... Я тоже могу такой написать... Меня интересует именно динамика, то есть адрес который мы заранее не знаем... Неужели движок перед загрузкой страницы разбирает строку, делает поиск по БД и только после этого грузит страницу? Если да, то на какой стадии он это делает?
0
Jewbacabra
Эксперт PHP
3511 / 2918 / 1304
Регистрация: 24.04.2014
Сообщений: 8,871
07.11.2018, 14:16 6
Неужели движок перед загрузкой страницы разбирает строку, делает поиск по БД и только после этого грузит страницу?
Да, именно так. Не совсем понимаю что подразумевается под стадией. Если рассматривать модель MVC, то за это отвечает слой контроллера.
1
Fedor92
Человек из 90-х
Эксперт HTML/CSS
2806 / 2376 / 1030
Регистрация: 15.12.2012
Сообщений: 8,816
Записей в блоге: 4
07.11.2018, 14:39  [ТС] 7
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Не совсем понимаю что подразумевается под стадией.
Время между запросом ресурса в браузере и подгрузкой страницы... То есть этап разложения адреса и поиска нужного ресурса в БД... Когда наткнулся на описание скрипта, о котором говорил выше - меня заинтересовал вопрос практической реализации, поэтому я и попросил код или литературу, чтобы устаканить в голове, как на самом деле проходит стадия динамического формирования ресурса по строке в броузере...
0
Jewbacabra
Эксперт PHP
3511 / 2918 / 1304
Регистрация: 24.04.2014
Сообщений: 8,871
07.11.2018, 15:06 8
Лучший ответ Сообщение было отмечено Fedor92 как решение

Решение

Fedor92, маршрутизация и взаимодействие с бд это разные процессы. Обычно сперва урл разбирается и определяется какую функцию нужно дернуть для обаботки. И дальше уже будет взаимодействие с бд или другими источниками данных.
Касаемо конкретной реализации готовых роутеров полно. Можно взять любой понравившийся с packagist и разобрать https://packagist.org/?query=router
1
Fedor92
Человек из 90-х
Эксперт HTML/CSS
2806 / 2376 / 1030
Регистрация: 15.12.2012
Сообщений: 8,816
Записей в блоге: 4
07.11.2018, 15:21  [ТС] 9
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Fedor92, маршрутизация и взаимодействие с бд это разные процессы.
Я в курсе... За скрипты большое спасибо - нашёл систему маршрутизации wordpress... Пойду пытать девелоперов по поводу скрипта...
0
Jodah
Эксперт PHP
2777 / 2429 / 1035
Регистрация: 01.08.2012
Сообщений: 8,570
07.11.2018, 15:45 10
Цитата Сообщение от Fedor92 Посмотреть сообщение
как на самом деле проходит стадия динамического формирования ресурса по строке в броузере...
Вариантов роутинга много, зависит в основном от используемого движка/фреймворка и предпочтений разработчика.

Как вариант, продумываем структуру URL таким образом, чтобы первые 2 сегмента URL указывали на контроллер и его метод, например:
/pages/update/5

Если юзер переходит по этому URL, пытаемся найти контроллер Pages и запустить метод update. А там внутри смотрим на 3-ий параметр URL и отображаем контент.

Если такого метода нет, запускаем главный метод index - например для таких URL:
/pages/how_install_android_on_calculator
/pages/apple_iphone_x_64gb

Или, как выше написали, роутер можно передавать в URL, как это реализовано в OpenCart по-умолчанию (без ЧПУ-модуля), можете глянуть демо:
https://www.opencart.com/index.php?route=cms/demo

Также можете посмотреть, как роутинг реализован в фреймворке Laravel:
http://laravel.su/docs/5.0/routing

Цитата Сообщение от Fedor92 Посмотреть сообщение
меня заинтересовал вопрос практической реализации
Собственно на этот вопрос уже ответили выше - смотрим на $_SERVER['REQUEST_URI'] и выбираем нужный контроллер, а каким инструментом это делать - как сами решите.
1
07.11.2018, 15:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2018, 15:45

ЧПУ
Доброй ночи. Возникла необходимость подключить ЧПУ к адресации. Колупаю гугл - ничего толкового...

ЧПУ
Пытаюсь сделать ЧПУ ссылки. Почитал, вроде суть понял, а всё равно не получается Вот простой...

Чпу
Помогите у меня вот такой вопрос что и как надо сделать чтобы на сайте место id можно было заменить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru