Subdomains leading to Codeigniter Controllers?
As you want to use a particular domain to lead to your controllers, what I came up with was using the application/config/routes.php
file to achieve it. The idea is load different controllers depending on what subdomain you use, so, instead of writing a list of routes for your domain, you write a list of routes DEPENDING on the domain you're accessing from:
switch ( $_SERVER['HTTP_HOST'] ) { case 'students.mysite.com': $route['default_controller'] = "students"; break; case 'teachers.mysite.com': $route['default_controller'] = "teachers"; default: // The list of your $routes lines at is was... break;}
To make this work, you only have to point the subdomain to your CI project (Dwayne Towell in the step 1 of the other answer explains how to do it perfectly) and you'll have everything working, your shared hosting won't be a problem and you won't have to configure the server.
UPDATE
After reading this answer, check the answer from @Josh (https://stackoverflow.com/a/47368922/1168804) as it offers a wonderful way to organize the routing code to avoid unexpected routing behaviour with the controllers. It's worthy reading it (and upvoting it, ;D)
Step 1: In CPanel, in Domains, in subdomains, add *.mysite.com
(you only enter the *
part) to redirect to /public_html/
(you enter nothing and/or delete wildcard) (or set this to whatever the current default value for www.mysite.com is currently.
Step 2 & 3: Use mod_rewrite to capture subdomain and move it to the "directory" part of the URL. I suspect it will be something like: (but I haven't tried it yet, RewriteLogLevel 9 is your friend)
RewriteEngine onRewriteCond %{HTTP_HOST} ^([^\.]+)\.mysite\.com$ [NC]RewriteRule ^(.*)$ http://www.domain.com/index.php/%1/$1 [L]
I also don't know if you can do the above using .htaccess
. I have only done rewriting from httpd.conf.
In application/config/routes.php file, you need to write
$subDomains = array();$subDomains['students.mysite.com'] = "student";$subDomains['teachers.mysite.com'] = "teachers";if(array_key_exists($_SERVER['HTTP_HOST'], $subDomains)) { $route['default_controller'] = $subDomains[$_SERVER['HTTP_HOST']];}