pasar parametros otro controlador cambiar php apache .htaccess codeigniter cpanel

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.