Path Rerouting in CodeIgniter

Rerouting in CodeIgniter is really simple if you already know how paths work in the framework. You have a controller that is used as the route redirect target. In other words, it picks up the redirected path as its own. Everything other than that is simple CodeIgniter coding. The path can be as many variables large as you may require.

Fairly complex routing systems can be set up this way without the bit of complexity you would have using straight php without a framework.  Below is a short and sweet, step by step simple example of how to accomplish a two variable reroute.

Step By Step

First Step is download CodeIgniter from their website.

Second Step is to unzip it into your server root or a subfolder.

Third Step is to create a .htaccess file that tells apache how to handle requests. This step isn’t necessary if you don’t care about index.php being in your paths. My code is installed in a subfolder named ciredir on my Xampp server in Windows:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /ciredir/index.php/$1 [L]
</code>

 

Fourth Step is to alter the application/config/routes.php file.

</code>

$route['default_controller'] = "welcome";
$route['404_override'] = '';
// works if .htaccess removes index.php in path
<strong>$route["go2/(:any)"] = "redir/where/$1/$2";
</strong>// if no .htaccess was used you include the index.php in path
// ex. http://localhost/index.php/go2/somevar/anothervar

I actually only added the one line to the default routes configuration file. As you can see there are two path variables defined that are used as arguments to the where() function. Below is the code for the Redir controller that acts as the redirect target. It should be located in the application/controllers folder.

redir.php 


</code>
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); </code>

class Redir extends CI_Controller {
public function __construct(){
parent::__construct();
}
public function index(){
echo 'DOES NOT work if you are using redirection';
echo 'DOES work if you are going to the controller name (/redir)';
}
/**
* where
* @param $foo
* @param $bar
* @return nothing
* @desc catches the redirection from the altered config/routes.php go2 entry
*/
public function where($foo, $bar)
{
// simply echo it out instead of calling a view to
// find out what's going on
echo ‘$foo = ‘ . $foo;
echo '<br/>';
echo ‘$bar = ‘ . $bar;
}
/* End of file redir.php */
/* Location: ./application/controllers/redir.php */

Finally try it out by going to http://localhost/go2/any/var .  Granted, all this code does is echo the variables back out to the screen (very unwise to put on a production server – because a web browser loves to see something it can interpret as something other than plain text). However, you can easily expand on the above code to whatever means you may desire.

* http://codeigniter.com/user_guide/general/routing.html

Advertisements

2 thoughts on “Path Rerouting in CodeIgniter

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s