Codeigniter subdomain routing

Joel Murphy picture Joel Murphy · Feb 2, 2014 · Viewed 19.8k times · Source

I'm trying to setup a blog script on a website running on the CodeIgniter framework. I want do this without making any major code changes to my existing website's code. I figured that creating a sub domain pointing to another Controller would be the cleanest method of doing this.

The steps that I took to setup my new Blog controller involved:

  1. Creating an A record pointing to my server's ip address.
  2. Adding new rules to CodeIgniter's routes.php file.

Here is what I came up with:

switch ($_SERVER['HTTP_HOST']) {
    case 'blog.notedu.mp':
        $route['default_controller'] = "blog"; 
        $route['latest'] = "blog/latest";
        break;
    default:
        $route['default_controller'] = "main";
        break;
}

This should point blog.notedu.mp and blog.notedu.mp/latest to my blog controller.

Now here is the problem...

Accessing blog.notedu.mp or blog.notedu.mp/index.php/blog/latest works fine, however accessing blog.notedu.mp/latest takes me to a 404 page for some reason...

My .htaccess file looks like this (the default for removing index.php from the url):

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

And my Blog controller contains the following code:

class Blog extends CI_Controller {

    public function _remap($method){
        echo "_remap function called.\n";
        echo "The method called was: ".$method;
    }

    public function index()
    {
        $this->load->helper('url');
        $this->load->helper('../../global/helpers/base');

        $this->load->view('blog');
    }

    public function latest(){
        echo "latest working";
    }

}

What am I missing out on or doing wrong here? I've been searching for a solution to this problem for days :(

Answer

Joel Murphy picture Joel Murphy · Feb 5, 2014

After 4 days of trial and error, I've finally fixed this issue!

Turns out it was a .htaccess problem and the following rules fixed it:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

Thanks to everyone that read or answered this question.