Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2017, 17:10   #1
ilyakislitsyn85
 
Регистрация: 02.07.2013
Сообщений: 8
По умолчанию ЧПУ

Подскажите, может кто знает?
Как сделано в известных соц.сетях, когда вводишь адрес:

vn.com/vasya

на самом деле отрабатывает

vn.com/profile.php?id=vasya

А если вручную ввести второй адрес, то отобразится все равно первый!

Как они это делают?
ilyakislitsyn85 вне форума Ответить с цитированием
Старый 12.09.2017, 17:12   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Например, погуглите mod_rewrite
p51x вне форума Ответить с цитированием
Старый 12.09.2017, 17:20   #3
ilyakislitsyn85
 
Регистрация: 02.07.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Например, погуглите mod_rewrite
p51x, пробовал это делать в .htaccess, но не работает, т.к. по сути делает редирект, в итоге получается ошибка 404, т.к папки /vasya реально не существует
ilyakislitsyn85 вне форума Ответить с цитированием
Старый 12.09.2017, 18:02   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от ilyakislitsyn85 Посмотреть сообщение
пробовал это делать в .htaccess, но не работает, т.к. по сути делает редирект, в итоге получается ошибка 404, т.к папки /vasya реально не существует
Категорически мало общего между редиректом и ошибкой 404.
Редирект – это осознанное, управляемое перенаправление запроса на другой обработчик.
404 – это ошибка, код ответа сервера о том, что запрашиваемые данные не найдены, хоть с редиректом, хоть без него.
Предположение о том, что использование mod_rewrite вызывает 404 – полностью ошибочно.
Вы его просто готовить не умеете ©
Что, кстати, странно – ибо в сети просто море рецептов по этому поводу.
Andkorol вне форума Ответить с цитированием
Старый 13.09.2017, 09:59   #5
scalpel
Форумчанин
 
Аватар для scalpel
 
Регистрация: 01.02.2010
Сообщений: 118
По умолчанию

Пробуй вот это
scalpel вне форума Ответить с цитированием
Старый 13.09.2017, 12:39   #6
ilyakislitsyn85
 
Регистрация: 02.07.2013
Сообщений: 8
По умолчанию

Да, htaccess и RewriteRule уже почти казались решением этой задачи, но есть условия, которые htaccess в принципе побороть не может. Придется все же писать свой компонент под джумла ради такого роутинга.
ilyakislitsyn85 вне форума Ответить с цитированием
Старый 13.09.2017, 20:37   #7
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Цитата:
Сообщение от ilyakislitsyn85 Посмотреть сообщение
Да, htaccess и RewriteRule уже почти казались решением этой задачи, но есть условия, которые htaccess в принципе побороть не может. Придется все же писать свой компонент под джумла ради такого роутинга.
что именно он не может побороть ?
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 14.09.2017, 08:14   #8
ilyakislitsyn85
 
Регистрация: 02.07.2013
Сообщений: 8
По умолчанию

Задача решена. Спасибо всем откликнувшимся.
Очень помогла статья 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;
}
ilyakislitsyn85 вне форума Ответить с цитированием
Старый 10.10.2017, 01:14   #9
klaus_nuk
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 25
По умолчанию

Неплозое решение, но помоему лучше все-таки использовать .htaccess - разница в скорости обработки будет существенная на высоконагруженных проектах. К примеру тот же ВК, спецом обрезали половина ПХП и назвали его KPHP.
klaus_nuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЧПУ Юрий-64 Помощь студентам 3 26.05.2016 00:30
Вопрос по ЧПУ igor17 PHP 3 05.03.2015 19:20
ЧПУ в .htaccess Небесный PHP 7 06.12.2013 16:49
ЧПУ и get параметры SoftKoc PHP 9 22.07.2013 03:42
ЧПУ kuba1981 PHP 11 02.10.2012 16:23