Как заставить CodeIgniter принимать URL-адрес строки запроса?

Согласно документам CI, CodeIgniter использует сегментный подход , например:

example.com/my/group 

Если я хочу найти определенную группу (id = 5), я могу посетить

 example.com/my/group/5 

И в контроллере определите

 function group($id='') { ... } 

Теперь я хочу использовать традиционный подход, который CI называет URL-адрес строки запроса. Пример:

 example.com/my/group?id=5 

Если я перейду к этому URL прямо, я получаю 404 страницу не найден . Итак, как я могу включить это?

Solutions Collecting From Web of "Как заставить CodeIgniter принимать URL-адрес строки запроса?"

Для надежного использования строк запроса я обнаружил, что вам нужно сделать 3 вещи

  1. В application/config/config.php установите $config['enable_query_strings'] = true;
  2. Снова в application/config/config.php установите $config['uri_protocol'] = "PATH_INFO";
  3. Измените свой .htaccess, чтобы удалить? (если имеется) в правиле перезаписи

Я использую следующие

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] 
 //Add this method to your (base) controller : protected function getQueryStringParams() { parse_str($_SERVER['QUERY_STRING'], $params); return $params; } // Example : instagram callback action public function callback() { $params = $this->getQueryStringParams(); $code = !empty($params['code']) ? $params['code'] : ''; if (!empty($code)) { $auth_response = $this->instagram_api->authorize($code); // .... } // .... handle error } 

Это может помочь некоторым людям; поместите это в конструктор вашего контроллера, чтобы повторно заполнить $ _GET на основе контроллера по контроллеру (например, если вы интегрируете стороннюю библиотеку, которая полагается на $ _GET – например, большинство библиотек PHP OAuth).

 parse_str(str_replace($_SERVER['QUERY_STRING'],'',$_SERVER['REQUEST_URI']),$_GET); 

Html:

 <a href="?accept=1" class="btn btn-sm btn-success">Accept</a> 

Функция контроллера

 if ($this->input->get('accept')!='') { $id = $this->input->get('accept', TRUE ); $this->camprequests->accept($id); redirect('controllername/functionname'); } 

Функция модели

 public function accept($id) { $data = array('status'=>'1'); $this->db->where('id','1'); if($this->db->update('tablename',$data)) { $this->session->set_flashdata("accpeted","<div class='col-sm-12 alert alert-success'>Accpeted successfully.</div>"); } else { $this->session->set_flashdata("accpeted","<div class='col-sm-12 alert alert-success'>Error..</div>"); } } 

Измените application/config.php на строке:

 $config['enable_query_strings'] = FALSE; 

Вместо этого сделайте это правдой. Есть и другие детали, на которые вы должны обратить внимание. См. Здесь .

После установки $config['enable_query_strings'] = TRUE; в вашем файле config.php вы можете использовать подход, основанный на сегментах, в сочетании с строками запроса, но только если вы используете две или более переменных (разделенных символом «&») в строке запроса следующим образом:

 example.com/my/group?id=5&var=something 

См. Этот ответ для получения дополнительной информации.

CodeIgniter дополнительно поддерживает эту возможность, которая может быть включена в вашем файле application / config.php. Если вы откроете свой файл конфигурации, вы увидите следующие элементы:

 enter code here $config['enable_query_strings'] = FALSE; 

$ config ['controller_trigger'] = 'c'; $ config ['function_trigger'] = 'm';

Если вы измените «enable_query_strings» на TRUE, эта функция станет активной.

Вы можете изменить URI PROTOCOL в вашем config file чтобы

  $config['uri_protocol'] = "ORIG_PATH_INFO"; 

а также

  $config['enable_query_strings'] = FALSE; 

Он будет принимать строки запроса и разрешать ваши URL-адреса. Работал для меня 🙂

Это действительно проверено и подтверждено

Он работает с любым способом, который вам нравится; давая вам свободу смешать соответствие строкой запроса и / сегмента (в отличие от предыдущих ответов)

либо вы хотите использовать:

 example.com/my/group/?id=5 

(обратите внимание на трейлинг / раньше?). ИЛИ

  example.com/my/group/5 

(в зависимости от ваших описаний шаблонов url в файле маршрутизатора). ИЛИ ДАЖЕ

 example.com/index.php/?my/group/?id=5 

(хотя это выглядит довольно неудобно)

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] 

и в файле config / config.php codigniter, установите

 $config['uri_protocol'] = 'AUTO'; $config['enable_query_strings'] = TRUE;