php - cambiar - pasar parametros de un controlador a otro codeigniter
Subdominios que conducen a controladores Codeigniter? (4)
En el archivo application / config / routes.php, necesita escribir
$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'']];
}
Esto parece una solicitud común, pero no he podido encontrar instrucciones definitivas para hacer algo como esto.
Me gustaría que un subdominio active un determinado controlador en mi instalación de CI. Por ejemplo:
students.mysite.com : abriría mysite.com/students (técnicamente: mysite.com/index.php/students . controller: students )
teachers.mysite.com : abriría mysite.com/teachers
Mientras conserva el subdominio al atravesar más profundo. Por ejemplo:
students.mysite.com/help : abriría mysite.com/students/help ( controller : students () , method : help () )
students.mysite.com/help/contact : abriría mysite.com/students/help/contact ( controller : students () , method : help () , argument : "contact" )
students.mysite.com/help/contact/email : abriría mysite.com/students/help/contact ( controller : students () , method : help () , arguments : "contact", "email" )
Me doy cuenta de que something.mysite.com en este momento devuelve un error. Entonces me imagino:
El paso 1 permitiría que anything.mysite.com devuelva la raíz (mysite.com/index.php)
El paso 2 sería leer el subdominio y llamar a ese controlador
El paso 3 sería leer el primer argumento después del primer "/" y llamar a ese método del controlador, y pasar las partes de url restantes como argumentos
Creo que realmente estoy perplejo en el Paso 1 . Estoy en una cuenta de alojamiento compartido, ¿puedo hacerlo a través de CPanel ? Traté de agregar un subdominio para * .mysite.com sin suerte (a menos que solo tuviera que esperar más para la propagación, pero creo que hay más posibilidades de que me equivoque).
De vuelta en la instalación de WAMP de mi casa, cambiaría httpd.conf, ¿verdad? ¿Puedo lograr este efecto sin modificar ese archivo (ya que probablemente no puedo, ya que estoy compartido usando webhostinghub.com)
Uff, gracias por tu tiempo! - Keith
Paso 1: en CPanel, en Dominios, en subdominios, agrega *.mysite.com
(solo ingresas la *
parte) para redirigir a /public_html/
(ingresas nada y / o borras comodín) (o configúralo como lo que sea actual) el valor predeterminado para www.mysite.com es actualmente.
Paso 2 y 3: utilice mod_rewrite para capturar el subdominio y moverlo a la parte "directorio" de la URL. Sospecho que será algo como: (pero aún no lo he probado, RewriteLogLevel 9 es tu amigo)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^/.]+)/.mysite/.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/index.php/%1/$1 [L]
Tampoco sé si puede hacer lo anterior utilizando .htaccess
. Solo he hecho reescribir desde httpd.conf.
!!!
Un paso muy importante que no quiere olvidar, además del gran ejemplo de Chococroc, es redirigir cualquier segmento al controlador de subdominio, de lo contrario terminará enrutando a un controlador que probablemente no exista. Ejemplo usando el código existente de Chococroc
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;
}
Navegando a ''teachers.mysite.com/login'' cargará el controlador de ''inicio de sesión'' NO el controlador de ''maestros'' esperado.
Si no desea este comportamiento inesperado, debe enrutar cualquier segmento al controlador del subdominio. Ahora serán una función de ese controlador.
switch ( $_SERVER[''HTTP_HOST''] ) {
case ''students.mysite.com'':
$route[''default_controller''] = "students";
$route[''(:any)''] = "students/$1";
break;
case ''teachers.mysite.com'':
$route[''default_controller''] = "teachers";
$route[''(:any)''] = "teachers/$1";
default:
// The list of your $routes lines at is was...
break;
}
Navegando a ''teachers.mysite.com/login'' ahora cargará el controlador ''teachers'' y ejecutará la función ''login'' dentro de ese controlador.
Hay otras cosas que podría hacer cumplir, como una subcarpeta para cada dominio, etc.
Como desea usar un dominio particular para dirigir a sus controladores, lo que se me ocurrió fue usar el archivo application/config/routes.php
para lograrlo. La idea es cargar diferentes controladores según el subdominio que use, por lo tanto, en lugar de escribir una lista de rutas para su dominio, escriba una lista de rutas DEPENDIENDO del dominio al que está accediendo:
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;
}
Para que esto funcione, solo debe apuntar el subdominio a su proyecto de CI (Dwayne Towell en el paso 1 de la otra respuesta explica cómo hacerlo a la perfección) y tendrá todo funcionando, su hosting compartido no será un problema y no tendrá que configurar el servidor.