Jump to content
  • 0

Вопрос с URL (переадресация)


korjik
 Share

Question

Привет, форумчане!

 

Тут такое дело.. у меня по адресу сайт.ру/profile/.index.php хранится страничка, в которой можно редактировать свою личную информацию. Этакий личный кабинет. По айдишнику берется из базы вся информация. Тобишь страничка одна, просто разная информация выводится для каждого юзера..
И тут мы подумали,что нужно сделать адрес для пользователей вида нашсайт.ру / имя пользователя. Тоесть через слеш.. можно ли как-то обрабатывать значение после слеша? Или мне всяко придется физически создавать папку на фтп, и переименовывать её под имя ползователя,а потом туда сохранять шаблон личного кабинета?
Подскажите пожалуйста, как в таких случаях делают.. или существует какие RewriteRules для таких случаев, чтобы зайдя на нашсайт.ру/имя пользователя я автоматически получал с базы информацию по этому пользователю.. напоминаю, сейчас у меня одна страница для всех
Заранее спасибо за ответ!

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

в htaccess нужна запись типа:

RewriteEngine onRewriteBase /RewriteRule ^([A-Za-z_0-9]+)/?$ index.php?user=$1

когда юзер тыкнет на ссылку, в ней должен быть передан параметр с ником (именем юзера) на латинице, типа: site.ru/rus - "rus" - это ник юзера, делаем запрос в бд и вытаскиваем всю поднаготную по этому юзеру: select * from users where `user` = "'.$_GET['user'].'"

  • Like 1
Link to comment
Share on other sites

  • 0
RewriteEngine onRewriteBase / RewriteRule ^([A-Za-z_0-9]+)/?$ index.php?user=$1

Не так не пойдет. Под регулярку будут попадать любые адреса, а не только на профили.

 

Нужна некая метка по которой можно будет определять что адрес является ссылкой на профиль, как пример можно взять систему как у ВКонтакте у них адреса на профили выглядят вот так:

 

http://vk.com/id123456

 

Тоесть регулярка под него будет примерно  такого вида:

^(id[0-9]+)
Edited by wwt
  • Like 1
Link to comment
Share on other sites

  • 0

wwt, подойдет, подойдет ;)

я в ссылке забыл в адресе: site.ru/profile/rus

там в начале сообщения есть этот адрес.

а в хтаккессе:

RewriteEngine on RewriteBase / RewriteRule ^profile/([A-Za-z_0-9]+)/?$ index.php?user=$1

или

RewriteEngine on RewriteBase / RewriteRule ^profile/(*/)/?$ index.php?user=$1

вторая запись верная вроде? я про: (*/)

  • Like 1
Link to comment
Share on other sites

  • 0

Как я понял ТС он хочет адреса без поддиректории, чтоб они были на примере контакта.


Вообще проще всего, и обычно так и делают. Реврайтом кидать все запросы на php скрипт, где адрес парсится и в зависимости от результатов выдается контент.

Link to comment
Share on other sites

  • 0

можно и так, но вот что лично мне в таких адресах не нравится, так это отсутствие смысловой нагрузки, т.е. я имею ввиду например как на маил.ру, если ник у тебя test, то и урл будет site.ru/test - тут видно сразу что я - это я, и если цифры не врезаются в память (в сучае если забыл урл), то тут как бэ все прозрачно.

Link to comment
Share on other sites

  • 0

можно и так, но вот что лично мне в таких адресах не нравится, так это отсутствие смысловой нагрузки, т.е. я имею ввиду например как на маил.ру, если ник у тебя test, то и урл будет site.ru/test - тут видно сразу что я - это я, и если цифры не врезаются в память (в сучае если забыл урл), то тут как бэ все прозрачно.

Вконтакте можно задать и индивидуальное имя вместо id, в настройках. То есть это имя будет просто алиасом. Опять же это в php проще роутить чем создавать правила в .htaccess

Edited by wwt
Link to comment
Share on other sites

  • 0

Расскажите, как мне через php реализовать такую штуку? Значит мне всяко придется роутить даже обычные странички (вроде О проекте), которые имеют фиксированный адрес?.. тобишь одна страница, которая в зависимости от адреса переносит на остальные?..

Link to comment
Share on other sites

  • 0

Расскажите, как мне через php реализовать такую штуку? Значит мне всяко придется роутить даже обычные странички (вроде О проекте), которые имеют фиксированный адрес?.. тобишь одна страница, которая в зависимости от адреса переносит на остальные?..

 

Именно. На данном принципе основано ЧПУ. Пишете правило модреврайта которое перекидывает все запросы на какой-то файл .php, в котором средствами php разбираете запрос и в зависимости от запроса выдаете содержимое.

Link to comment
Share on other sites

  • 0

можно конечно сделать совсем просто правилом в htaccess что-то типо:

RewriteEngine onRewriteBase / # Проверяем не является ли адрес реальной директориейRewriteCond %{REQUEST_URI} !-d# Проверяем не является ли адрес реальным файломRewriteCond %{REQUEST_URI} !-f# проверяем URL на существование но это не есть хорошо из-за подзапроса и нагрузки на сервер.По-этому закомменчу пожалуй# RewriteCond %{REQUEST_URI} !-U# Если первый сегмент URI начинается с "id" и имеет 9 цифр после буквRewriteCond %{REQUEST_URI} ^/id([0-9]){9}/(.*)$ [OR]# Или если первый сегмент является строкой состоящей из a-zA-Z_0-9 и длиной от 5 до 15 символовRewriteCond %{REQUEST_URI} ^/([a-zA-Z_0-9]){5,15}/(.*)$# То перекидываем запрос на файл index.php в директории profile и передает ему 3 параметра это: u(9 цифр или строку), s (часть адреса после id, и uri(весь адрес)RewriteRule (.*) /profile/index.php?u=%1&s=%2&uri=$1 [L,QSA]

на работоспособность нужно проверять, не проверял если честно так набабахал. Если чо я не виноват )))

 

ЗЫ Из-за минусов я бы это делал средствами php, да и там можно систему сделать более гибкой и функциональной.  Ну и как сказал rus с помощью директив модуля апача это более ресурсозатратно.

Edited by wwt
  • Like 1
Link to comment
Share on other sites

  • 0

Обалдеть. Всё получилось! Ребят, спасибо огроменное за дискуссию  ;)
Написал следующее:

RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^([A-Za-z0-9-]+)$ /pages/?url=$1 [L]

В папке "/pages/" я проверяю, есть ли параметр url, и вообще всё прекрасно! ^_^

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy