2010-08-02 16 views
5

estoy creando un sitio web utilizando el framework MVC (Yu) y necesito para crear dinámicamente subdominios, es decir http://company.website.comCreación dinámica de subdominios

Por lo tanto, con el fin de lograr esto he añadido un comodín DNS (* .website.com). Ahora el problema es que mis controladores de aplicaciones son todos iguales para www.website.com y para company.website.com. Por ejemplo, tengo un controlador User con acción Register (user/register). Ahora si voy a www.website.com/user/register Puedo registrarme, pero puedo hacer exactamente lo mismo si voy a company.website.com/user/register. Y este comportamiento es el mismo para todos mis controladores.

Me doy cuenta de que todo está funcionando correctamente, pero ¿cómo separe los controladores para www.website.com y para compnay.website.com? No quiero que los usuarios accedan a register/login/otros controladores y acciones desde la url de subdomian.

¡Cualquier sugerencia es muy apreciada!

¡Gracias!

Respuesta

4

Puede incluir el nombre de host en su matriz de reglas de enrutamiento. Por ejemplo, puede crear reglas

array(
    'http://www.website.com/user/register' => 'user/register', 
    'http://<company:\w+>.website.com/user/register' => 'other/route', 
) 

y comprobar si hay company parámetro en la acción other/route. Tenga en cuenta que se requiere http:// para que funcionen esas reglas. Consulte la documentación de CUrlManager para obtener más detalles.

P.S. Si los controladores para http://www.website.com y http://company.website.com/user/register son completamente diferentes, podría ser mejor configurar dos aplicaciones para esos sitios.

+0

Hola, sé que este es un hilo muy viejo, pero no quiere funcionar para mí. ¿Tengo que cambiar la configuración de mi archivo 'vhosts' o el archivo' hosts' en Windows (Apache)? – Sthe

2

Si entiendo su pregunta, el componente 'empresa' de la URL es un nombre de empresa variable. Continuaré mi respuesta bajo esa suposición.

Otra opción sería crear un módulo de compañía (lo llamaré 'Compañías' por el momento), y usar las reglas de CUrlManager para enrutar a ese controlador. P.ej.

array(
    'http://<company:\w+>.website.com/user/register' => '/companies/user/register', 
    'http://<company:\w+>.website.com/<_c:\w+>/<_a:\w+>' => '/companies/<_c>/<_a>' // more generic option 
), 

La cadena 'empresa' se pasará a la aplicación como $ _GET [ 'empresa'] y se puede utilizar este parámetro en el archivo de CompaniesModule.php para cargar algunos datos específicos de la compañía.

Tenga en cuenta que sin alguna otra regla para manejar las solicitudes de www.website.com (según la respuesta de Gray Teardrop) obtendrá errores en las solicitudes a ese subdominio.

Cuestiones relacionadas