yii wildcard-subdomain

yii - Creación dinámica de subdominios



wildcard-subdomain (2)

Estoy creando un sitio web usando MVC framework (Yii) y necesito crear subdominios dinámicamente, es decir, http://company.website.com

Entonces, para lograr esto he agregado un comodín de 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 de User con acción de 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 deseo que los usuarios accedan a register / login / otros controladores y acciones desde la url de subdomian.

¡Cualquier sugerencia es bienvenida!

¡Gracias!


Podría incluir el nombre de host en su matriz de reglas de enrutamiento. Por ejemplo, podrías crear reglas

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

y verifique el parámetro de company en su other/route acción de other/route . Tenga en cuenta que se requiere http:// para que esas reglas funcionen. Vea la documentación de CUrlManager para más detalles.

PD: 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.


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

Otra opción sería crear un módulo de empresa (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 [''company''] y puede usar este parámetro en su archivo 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.