Скрыть get параметры в URL

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Владислав
Сообщения: 7
Зарегистрирован: 2011.03.10, 10:56

Скрыть get параметры в URL

Сообщение Владислав »

Доброе время суток уважаемые форумчане.
Прошу помощи в вопросе касающемся вида URL, необходимо скрыть все get параметры ссылки, что-бы ссылка вида

http://site.com/controller/action/3 (где 3 - это параметр id=3. - url видоизменен url менеджером )

имела вид

http://site.com/controller/action/

-----------------------------------
Вопрос №2.

По поводу скрытия index.php.

1.htaccess добавил в корень и дописал

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

2. Дописал
'urlManager'=>array
(
'urlFormat'=>'path',
'showScriptName'=>false,
),

В следствии чего получаю от браузера ошибку Not Found : The requested URL /company/index was not found on this server.

Если оставить только 'showScriptName'=>false, то index.php пропадает но появляется ?r=controller, а если оставить только 'urlFormat'=>'path', то "?r=" исчезает но зато появляется index.php. Нужно что бы не было "?r=" и Index.php одновременно.

Заранее благодарен.
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Скрыть get параметры в URL

Сообщение esche »

Владислав писал(а):Доброе время суток уважаемые форумчане.
Прошу помощи в вопросе касающемся вида URL, необходимо скрыть все get параметры ссылки, что-бы ссылка вида
http://site.com/controller/action/3 (где 3 - это параметр id=3. - url видоизменен url менеджером )
имела вид
http://site.com/controller/action/
Эм.. а как сервер узнает, что нужен именно ID 3?
А если Id не требуется - его в можно и не указывать.. тогда ссылки будут чистыми.
В следствии чего получаю от браузера ошибку Not Found : The requested URL /company/index was not found on this server.
Проверьте наличие модуля mod_rewrite
...
Владислав
Сообщения: 7
Зарегистрирован: 2011.03.10, 10:56

Re: Скрыть get параметры в URL

Сообщение Владислав »

esche писал(а): Эм.. а как сервер узнает, что нужен именно ID 3?
А если Id не требуется - его в можно и не указывать.. тогда ссылки будут чистыми.
Id требуется - именно Id выступает ключом для контроллера - и вся логика завязана на id.
По поводу как сервер узнает - ну распознает url вроде framework ( не? ) и правила урла тоже задаются в url manager-е фрэймворка. ( main.php )
В любом случае задача остается нерешенной : скрыть get параметры в URL - что бы юзер не видел параметров в ссылке.
esche писал(а): Проверьте наличие модуля mod_rewrite
Проверил, все есть :
Apache2/conf/httpd.conf :

LoadModule rewrite_module modules/mod_rewrite.so
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Скрыть get параметры в URL

Сообщение rak »

скрыть можно только название параметра, т.е. ссылка выглядит так
http://site.com/controller/action/3
а не так
http://site.com/controller/action/id/3
Токагэ
Сообщения: 27
Зарегистрирован: 2011.04.21, 14:04

Re: Скрыть get параметры в URL

Сообщение Токагэ »

1. Боюсь, нормальных способов для этого не существует. )
Но если хочется острых ощущений ;), можете поставить на ссылки, на которые будут тыкать пользователи, js-обработчик, который будет брать параметр из кликнутой ссылки (<a actionId="5" ...>) и пихать его в куки, и только потом переводить его по этой ссылке. Контроллер будет обрабатывать куку и форвардить на нужный экшен. А ежели прям совсем чего-нибудь эдакого хочется, оберните каждую ссылку в POST-форму с урл-ом на нужный контроллер и нужным actionId в скрытом поле. :geek:

2. Пропишите "AllowOverride All" в настройках директории апачевского виртуалхоста и перезагрузите апач.
Аватара пользователя
alaevka
Сообщения: 77
Зарегистрирован: 2010.03.12, 11:34
Контактная информация:

Re: Скрыть get параметры в URL

Сообщение alaevka »

Вот тут аналогичную тему создавал - http://www.yiiframework.ru/forum/viewto ... f=4&t=4343 - посмотрите к чему пришли - вывод - реализовывать через куки, но в моем проекте оно того не стоило и оставил как есть..
piter-i
Сообщения: 19
Зарегистрирован: 2011.01.11, 17:47

Re: Скрыть get параметры в URL

Сообщение piter-i »

Я никогда не понимал для чего вообще нужно скрывать параметры. Если это простой сайтец, то пары тройки параметров обычно хватает (кстати взгляните на адрес какой формируется гуглём после пары запросов:
source=ig&hl=ru&rlz=1G1GGLQ_RURU348&q=dgdgdfg&btnG=Поиск+в+Google#sclient=psy-ab&hl=ru&newwindow=1&rlz=1G1GGLQ_RURU348&source=hp&q=1&pbx=1&oq=1&aq=f&aqi=&aql=1&gs_sm=e&gs_upl=108736l112076l0l112241l6l4l2l0l0l0l379l569l1.1.0.1l5l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=70cbb7a59235739a&biw=1417&bih=851
так что даже если не хватает то ничего страшного). А если это веб приложение то тем более никто не будет обращать внимания на число параметров в урле.
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Скрыть get параметры в URL

Сообщение timlar »

Вопрос топикстартеру: А зачем вообще понадобилось скрывать параметры? Какая цель преследуется?
Twitter: @timlar_ua
Владислав
Сообщения: 7
Зарегистрирован: 2011.03.10, 10:56

Re: Скрыть get параметры в URL

Сообщение Владислав »

Токагэ писал(а): Пропишите "AllowOverride All" в настройках директории апачевского виртуалхоста и перезагрузите апач.
Спасибо,теперь работает.
piter-i писал(а): Я никогда не понимал для чего вообще нужно скрывать параметры
timlar писал(а): Вопрос топикстартеру: А зачем вообще понадобилось скрывать параметры? Какая цель преследуется?
На Id завязана логика. ( в данном случае у меня страница которая выводит информацию о компании - о какой именно компании выводить информацию контроллеру говорит Id - контроллер в свою очередь делает выборку из компаний юзера по ключу - Id ). Только вот юзер не должен знать ничего о том что у компании есть id - и тем более знать id своей компании - потому что можно отправить http запрос и ручками указать не свой id - в таком случае контроллер выведет информацию о чужой компании, и тогда придется на уровне контроллера делать фильтр, который отсеивает запросы http с параметрами id - площадок, которые не принадлежат данному юзеру.
Последний раз редактировалось Владислав 2011.10.18, 14:32, всего редактировалось 1 раз.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Скрыть get параметры в URL

Сообщение rak »

так если просматривать можно только свою компанию, то можно в приложении делать выборку не по id из гета, а по Yii::app()->user->id
Владислав
Сообщения: 7
Зарегистрирован: 2011.03.10, 10:56

Re: Скрыть get параметры в URL

Сообщение Владислав »

rak писал(а):так если просматривать можно только свою компанию, то можно в приложении делать выборку не по id из гета, а по Yii::app()->user->id
по Yii::app()->user->id делается выборка по ВСЕМ компаниям юзера. - и это company/index (controller/action). Но в данном случае необходимо просмотреть информацию о КОНКРЕТНОЙ площадке - и это уже будет выборка по id ( у каждой площадки есть свой id ) и это company/view. <-- дак вот в данном случае у меня это ссылка вида ompany/view/3 (где 3 это id). - собственно от которого я пытаюсь избавится
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Скрыть get параметры в URL

Сообщение rak »

тогда нужно передавать ид компании и выполнять проверку на принадлежность компании данному юзеру. Остальное - дикие костыли(типа поста или кук)
что то типа

Код: Выделить всё

$model = Company::model()->findByPk($companyId);
if($model->user_id != Yii::app()->user->id) {
    throw new CHttpException(400);
}
 
Владислав
Сообщения: 7
Зарегистрирован: 2011.03.10, 10:56

Re: Скрыть get параметры в URL

Сообщение Владислав »

rak писал(а):нужно передавать ид компании и выполнять проверку на принадлежность компании данному юзеру
Верно, id компании нужно передавать по любому, и сделать проверку на принадлежность компании можно ( и скорей всего так и будет ), но, нельзя ли скрыть из URL - а номер компании?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Скрыть get параметры в URL

Сообщение rak »

нет, но можно вместо id передавать например название компании в транслите.
Типа /company/my-company-1
Тогда обычная подстановка идишника ничего не даст. Хотя эффект такой же, все равно проверку делать нада
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Скрыть get параметры в URL

Сообщение timlar »

Самый простой и как по мне правильный вариант, проверять, принадлежит компания юзеру или нет, если нет, то выводить страницу с сообщением "Слы? Че ты тут забыл?". На счет кук согласен с rak, это дикие костыли.
Twitter: @timlar_ua
Johnatan
Сообщения: 167
Зарегистрирован: 2010.10.27, 13:06
Откуда: Reino de España

Re: Скрыть get параметры в URL

Сообщение Johnatan »

Можно создать отдельное поле каждой компании, присвоить ей некий рандомный код: www.example.com/company/x3E21fM выдаст одну компанию, а www.example.com/company/G99re1d выдаст другую. Код создавать и присваивать при добавлении компании в базу. Подобрать такой код почти нереально. Таким образом подбором никто ничего не посмотрит, а если дать кому-то ссылку, то он сможет смотреть данные по этой компании (даже если он не является владельцем). Также код можно сгенерировать заново. Внутри базы для связей, конечно, нужно использовать id как PRIMARY KEY. Просто юзер никогда его не увидит и не сможет по этому id искать.
Конференция: yii@conference.jabber.ru
Ответить