[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Красивая ссылка, вместо id=123
lop_atin
Здравствуйте, давно заметил, что в соц. сетях вместо id в ссылке, человек может выбрать слово. Ну вот например:

vk.com/id1123123 - было
vk.com/lopatin - стало

Собственно как это организовать?
Я понимаю, что можно просто в переменную id записывать слово и искать потом пользователя по этому слову, но тут тоже есть проблема:

1. Я могу сделать текстовую ссылку, но не красивую вот так: mysite.ru/id=lopatin
То есть, как видно все-равно остается часть букв, которую нужно убрать из ссылки.

2. Окей, допустим я сделаю "красивые ссылки" такого вида: mysite.ru/lopatin
Но тут опять проблема, я же в БД буду искать в таблице user человека с такой ссылкой, но... а если это, например, не ссылка не пользователя, а группы, ну вот например, как ВК группа есть: vk.com/mdk

Эта ссылка ведет не на страницу пользователя, а на группу. То есть по логике: код с начало должен пройтись по всем пользователями в БД с юзерами, чтобы убедиться, что такой ссылки неукого нет, потом он идет в другую БД с группами и уже там... Это же ведь долго.... А если таких страниц миллионы...

Согласитесь, если бы ссылка была такого вида: mysite.ru/group=mdk машине было бы понятно, что эту группу надо искать только в БД с группами и если она там ее не найдет, то ссылка не верна, и уже в других БД искать ее не надо... Но опять же, такие ссылки не красивые...


Ну вообщем-то расскажите, как все это работает? Ведь если представить, ВК, например. десятки миллионов страниц, неужели после постоянно загрузки страницы машина по всей БД слово сразу во всех БД...?
lop_atin
Часть ответа нашел здесь: http://www.it74.su/techblog/hru-chpu-mod_r...sivy-e-ssy-lki/
inpost
vk.com/id1123123 - было
vk.com/lopatin - стало

if($_GET['page'] == 'id555') {
$_GET['page'] = 'lopatin';
}


Теперь что брать и на что заменять (id555,'lopatin') занеси в БД и сделай выборку. Если запись такая есть, то делаешь автозамену. В итоге у тебя работает и как id555, и как lopatin. Достаточно просто, хотя и грубо.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
lop_atin
Цитата (inpost @ 25.01.2014 - 23:17)
vk.com/id1123123 - было
vk.com/lopatin - стало

if($_GET['page'] == 'id555') {
$_GET['page'] = 'lopatin';
}


Теперь что брать и на что заменять (id555,'lopatin') занеси в БД и сделай выборку. Если запись такая есть, то делаешь автозамену. В итоге у тебя работает и как id555, и как lopatin. Достаточно просто, хотя и грубо.

Спасибо за ответ, но, мы же понимаем, что на сайтах это не так работает)) Давайте, определим как все это работает в реале.
inpost
lop_atin
Почему не так? Как раз именно так, из БД достаются пути. Посмотри на многих CMS, как они работают с такой вещью как ЧПУ и как получаются названия товаров в адресной строке.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
sergeiss
Цитата (lop_atin @ 25.01.2014 - 23:37)
Спасибо за ответ, но, мы же понимаем, что на сайтах это не так работает

"Мы" - это кто? И если "МЫ" - это форумец lop_atin, то скажи нам, о добрый человек!, как же это делается? И если ты знаешь, то зачем же тогда спрашиваешь? smile.gif

Лично я вот вижу только один путь - БД. Потому что это, по сути дела, динамическая ссылка, а не статичная. Для неё именно БД подходит.

PS. Вот спроси меня, как формируются красивые ссылки типа такой http://www.energy-trucks.ru/volvo_fh_480_a...km_2005_gv.html и я тебе отвечу: с помощью БД smile.gif Нету на сайте таких страниц. При подаче объявы её заголовок переводится в английский регистр и получается такая вот ссылка. На самом деле типов страниц там немного. А вместо такой вот длинной ссылки из БД выбираются определенные параметры определенной объявы.
Откуда я знаю, спрашиваешь? Потому что помогал это сделать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
olimpset
А почему бы RewriteRule не использовать?
sergeiss
Цитата (olimpset @ 26.01.2014 - 15:33)
А почему бы RewriteRule не использовать?

Потому что если эти ссылки юзер сам может прописывать, то должна быть возможность на автомате всё менять. То есть, некий скрипт должен залезать в htaccess и там что-то менять. Причем, без ошибок smile.gif Да еще надо проанализировать, чтобы юзер хрень какую туда не засунул.

Если у тебя таких ссылок много-много и они часто меняются, то обращений к htaccess будет много. При хорошей нагрузке на сайт есть вероятность, что будет 2 или более одновременных обращения. Значит, нужна защита от такой проблемы... В итоге получится, что напишешь бледный аналог работы с БД, где в виде единственной таблицы выступает htaccess.

Вопрос: зачем??? Не лучше ли сразу использовать БД?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
lop_atin
Простите, если кого-то не правильно понял, или сам не правильно поставил вопрос.

Основной вопрос был: Как сделать красивую ссылку, потому что до этого получалось только вот такие ссылки: site.ru/index.php?id=lopatin

А хотелось получить вот такую ссылку: site.ru/lopatin

Получилось это сделать с помощью .htaccess

RewriteEngine on
RewriteRule ^map$ map.php [L,QSA,NC]
RewriteRule ^([a-z0-9]+)$ ./site/index.php?page=$1 [L,QSA,NC]
RewriteRule ^.htaccess$ — [F]
RewriteRule ^sqconnt.php$ — [F]


Кстати, sergeiss, почему Вы говорите, что этот способ не корректный? Разве не так это делают на тех же соц. сетях?

И так, добиться нужной ссылки у меня получилось, потом просто в php я получаю переменную id = lopatin (в ссылка она скрытая, но на самом деле она есть), и получаю данные из БД по этому пользователю.

Теперь появились еще проблемы:

1. Как сделать, чтобы ссылки были только в нижнем регистре. Просто пользователь может ввести вот так: site.ru/LopATIn

Да, в php я использую: $id = mb_strtolower($_GET['id']), и из ссылки получаю строку (переменную) в нижнем регистре, просто в самой ссылке не знаю как это изменить, чтобы ссылка не смотрелась убога, и сама автоматически переводилась в нижний регистр...

Вот если в ВК я напишу в ссылку: vk.com/DUROV , то после обновления ссылка замениться на vk.com/durov, а у меня на сайте такого не происходит, ссылка остается в том же регистре как и написали.

2. И вторая проблема, ведь у меня на сайте допустим 3 страницы: index, about, contacts

Если раньше все три страницы работали, то сейчас, если я напишу: site.ru/about , то сайт будет думать, что ABOUT это пользователь и ищет его в БД.... То есть как бы страницы не открывает...

Он думает, что я запрашиваю: site.ru/index.php?id=about, хотя на самом деле я хочу открыть: site.ru/about.php

Как поступить в этом случаи подскажите, я думал, может в том же .htaccess как-то можно прописать список страниц, которые не учитывать как сокращение .

В любом случаи буду благодарен! Спасибо, что помогаете!
sergeiss
Цитата (lop_atin @ 26.01.2014 - 18:47)
Кстати, sergeiss, почему Вы говорите, что этот способ не корректный? Разве не так это делают на тех же соц. сетях?

Я выше в этой теме расписал подробно. В частности,
Цитата (sergeiss @ 26.01.2014 - 16:38)
Если у тебя таких ссылок много-много и они часто меняются, то обращений к htaccess будет много. При хорошей нагрузке на сайт есть вероятность, что будет 2 или более одновременных обращения.

Ну, и все остальное там расписано.

Цитата (lop_atin @ 26.01.2014 - 18:47)
Он думает, что я запрашиваю: site.ru/index.php?id=about, хотя на самом деле я хочу открыть: site.ru/about.php

Проанализируй это внутри index.php и "подинклудь" нужный файл.

PS. А что касается изменения регистра... То History API тебе в помощь smile.gif Ты можешь прописать любой УРЛ без перезагрузки страницы.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
lop_atin
Цитата (sergeiss @ 26.01.2014 - 18:53)
Проанализируй это внутри index.php и "подинклудь" нужный файл.


То есть вы предлагаете сделать 1 страницу Index.php и в нее выводить (инклюд) все существующие страницы сайта (персональные страницы пользователей, about....)?
lop_atin
Цитата (inpost @ 25.01.2014 - 23:17)
vk.com/id1123123 - было
vk.com/lopatin - стало

if($_GET['page'] == 'id555') {
    $_GET['page'] = 'lopatin';
}


Теперь что брать и на что заменять (id555,'lopatin') занеси в БД и сделай выборку. Если запись такая есть, то делаешь автозамену. В итоге у тебя работает и как id555, и как lopatin. Достаточно просто, хотя и грубо.

И еще я не понимаю, как с помощью этого способа предлагают изменить саму ссылку?

Я немного ошибся, было НЕ: vk.com/id1123123
А вот БЫЛО: vk.com/index.php?id=1123123

И с помощью:

if($_GET['page'] == 'id555') {
$_GET['page'] = 'lopatin';
}


ссылку не как не изменишь... ну то есть после этого когда ссылка все-равно не станет вот такой: vk.com/lopatin
Michael
Цитата (lop_atin)
Он думает, что я запрашиваю: site.ru/index.php?id=about, хотя на самом деле я хочу открыть: site.ru/about.php


ты должен или иметь правило в mod_rewrite, которое с about запросит about.php или запрашивать с расширением.
Вообще посмотри у движков htacess , обычно еще условия идут что не файл или папка.

Вообще ЧПУ - это не простая вещь.
Можно подделывать кучей способов вручную.
А можно как в друпале, где есть понятие внутреннего и внешнего пути, соответствие их лежит в базе, накладней вариант конечно, но зато управлять легко.

_____________
There never was a struggle in the soul of a good man that was not hard
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.