By default, CodeIgniter only allows segment-based URLs, however it is also possible with a little fiddling to use querystrings.
http://domain.com/this/is/a/url/segment //Segment based URL http://domain.com/?type=message&message=hi //Querystring based url
For added flexability, we can choose whether we want to make this change application-wide or controller-specific.
1 – Application-wide (This will affect every controller):
In system/application/config.php find and modify the following two lines:
//Change from 'AUTO' to 'PATH_INFO' to allow querystrings
$config['uri_protocol'] = 'PATH_INFO';
//Change from 'FALSE' to 'TRUE' to allow querystrings
$config['enable_query_strings'] = TRUE;
2 – Controller-specific (This will only affect a single controller and not your entire application)
In system/application/config.php find and modify the following line:
//Change from 'AUTO' to 'PATH_INFO' to allow querystrings
$config['uri_protocol'] = 'PATH_INFO';
In the controller you wish to add querystrings to, add into the constructor:
function Welcome()
{
parent::Controller();
//Allow querystrings for this constructor
parse_str($_SERVER['QUERY_STRING'],$_GET);
}
That’s it. To give this a test, create a ‘Welcome’ controller in system/application/controllers/ with the following code:
<?php
class Welcome extends Controller {
function Welcome()
{
parent::Controller();
//Uncomment this if using controler-specific querystrings
//parse_str($_SERVER['QUERY_STRING'],$_GET);
}
function index()
{
if ( isset($_GET['message']) )
echo $this->input->get('message');
else
echo 'There is no message';
}
}
You should now be able to locate http://yoursite.com/welcome/?message=Hello-World
If you’re trying this on a new CodeIgniter installation and are wondering why you’re getting a ‘page not found’ error, make sure you’ve got your .htaccess file in the CodeIgniter root directory:
RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]