Переадресация на URL-адрес референта в кодеригнере

В системе обмена сообщениями моего проекта, когда вы получаете сообщение от пользователя, вы получаете оповещение по электронной почте о том, что другой пользователь отправил сообщение, чтобы просмотреть сообщение, нажмите здесь (то есть URL-адрес сообщения). Так, если пользователь не вошел в систему он перенаправляется на страницу входа в систему, и после входа в систему он должен вернуться к URL-адресу реферирования. Я создал базовый контроллер в основной папке и расширил CI_controller, код аутентификации выглядит следующим образом.

function authenticate($type = 'user') { if($type == 'user') { if($this->user_id) { // user is logged in. check for permissions now } else { // user isnt logged in. store the referrer URL in a var. if(isset($_SERVER['HTTP_REFERER'])) { $redirect_to = str_replace(base_url(),'',$_SERVER['HTTP_REFERER']); } else { $redirect_to = $this->uri->uri_string(); } redirect('user/login?redirect='.$redirect_to); exit; } } if($type == 'admin') { if($this->session->userdata('admin_id') && $this->session->userdata('user_type') ==5) { // Admin is logged in } else { redirect('admin/login'); exit; } } } 

URL-адрес реферала «http://example.com/project/pm/view_conversation?id=11» теперь проблема заключается в том, что я получаю URL-адрес реферала до просмотра_сочетания и не могу получить идентификационную часть.

Любое предложение ?

Спасибо.

Solutions Collecting From Web of "Переадресация на URL-адрес референта в кодеригнере"

Это может помочь:

CI 2+ https://www.codeigniter.com/userguide2/libraries/user_agent.html

CI 3+ http://www.codeigniter.com/user_guide/libraries/user_agent.html

 $this->load->library('user_agent'); if ($this->agent->is_referral()) { echo $this->agent->referrer(); } 

Как насчет просто

 redirect($_SERVER['HTTP_REFERER']); 

Использование глобальной переменной php $_SERVER .

Это сработало для меня!

Поскольку у вас есть двойной знак вопроса в URL-адресе, браузер игнорирует часть URL-адреса после второго. Используйте urlencode для переадресации части, например:

 redirect('user/login?redirect='.urlencode($redirect_to)); 

Я проверил его, и он работает таким образом.

По умолчанию CI настроен на игнорирование части запроса URL-адреса (часть после «?»).

См .: http://codeigniter.com/user_guide/general/urls.html

Поместите этот код в свой логин

 function index() { $this->load->library('user_agent'); // load user agent library //Set session for the referrer url $this->session->set_userdata('referrer_url', $this->agent->referrer() ); } 

После ввода кода перенаправления

 // user is authenticated if referrer is there if( $this->session->userdata('referrer_url') ) { //Store in a variable so that can unset the session $redirect_back = $this->session->userdata('referrer_url'); $this->session->unset_userdata('referrer_url'); redirect( $redirect_back ); }