Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.146.34.191] |
|
Сообщ.
#1
,
|
|
|
Подскажите, может кто знает?
Как сделано в известных соц.сетях, когда вводишь адрес: vn.com/vasya на самом деле отрабатывает vn.com/profile.php?id=vasya А если, наоборот, ввести адрес vn.com/profile.php?id=vasya то отобразится все равно vn.com/vasya Как они это делают? |
Сообщ.
#2
,
|
|
|
Цитата Grisha @ на самом деле отрабатывает vn.com/profile.php?id=vasya С чего ты это решил? |
Сообщ.
#3
,
|
|
|
Цитата Serafim @ С чего ты это решил? Ну конечно не именно так скрипт называется и путь может быть другой. Но у них явно не созданы папки на сервере под каждого пользователя )) |
Сообщ.
#4
,
|
|
|
Цитата Grisha @ Ну конечно не именно так скрипт называется и путь может быть другой. Но у них явно не созданы папки на сервере под каждого пользователя )) Я спросил на тему - с чего ты решил, что роут как-то связан с аргументами и почему там какие-то преобразования есть. $_SERVER уже содержит информацию о самом роуте и никто не мешает её обрабатывать. Например: $router->get('/{name}', 'MyController@action')->where('name', '\w+'); Что означает: Если есть адрес, соответствующий паттерну "/\w+", то создать объект класса "MyController" и вызвать его метод "action", с передачей информации о запросе, поле "name" из роута и прочих данных (зависит от реализации). Добавлено Цитата Serafim @ Например Ну это высокоуровневый пример, если на низком уровне, то происходит примерно следующее: if (preg_match('/^\/(?P<name>\w+)$/isu', $_SERVER['REQUEST_URI'])) { (new MyController)->action(...); } Добавлено P.S. Если рассматривать роутинг в рамках фреймов, то можно почитать тут: - https://laravel.com/docs/5.5/routing#basic-routing или тут: - https://symfony.com/doc/current/routing.html |
Сообщ.
#5
,
|
|
|
Задача решена. Спасибо всем откликнувшимся.
Очень помогла статья http://gency.ru/single-entry-point Решил таким способом: Вклинился в корневой файл index.php, вставил вызов функции (при true сразу выхожу из index.php): function checkUserAccount() { $p=strtolower(preg_replace('#//+#','/',$_SERVER['REQUEST_URI'])); if (strlen($_SERVER['QUERY_STRING'])) $p=substr($p,0,-(strlen($_SERVER['QUERY_STRING'])+1)); if (count($pa=explode('/',$px=trim($p,'/'),2))<2) $pa[]=''; if ((count($pa) >= 1) and ($pa[0] является аккаунтом)) { $_GET['id'] = $pa[0]; include './profile/index.php'; return true; } return false; } |
Сообщ.
#6
,
|
|
|
Цитата Grisha @ Решил таким способом: Плохое решение. И что у тебя будет при: "http://site.com/vasya?id=23"? |
Сообщ.
#7
,
|
|
|
Сообщ.
#8
,
|
|
|
Вот детальный переход с PHP на фреймворки и правильный роутинг
https://symfony.com.ua/doc/current/introduc...o_symfony2.html Детальнее о роутере в Symfony https://symfony.com.ua/doc/current/routing.html |