¿Cómo crear Sub Dominios usando Cake PHP?

Estoy construyendo un sitio, que requiere un subdominio único para cada perfil. La tecnología que estoy usando es Cake PHP + MongoDB. Necesito saber la viabilidad de lo mismo. Si puedo crear un DNS físico o simplemente puedo enrutar la página de perfil del usuario, con la ayuda de la clase de rutas en Cake PHP. Sugiera cuál será la mejor y más fácil manera de implementar junto con la viabilidad de la misma.

Gracias por adelantado.

Si está utilizando CakePHP para cada uno de los sitios web, no necesita preocuparse por la creación de subdominios múltiples para cada sitio, simplemente puede crear un registro DNS comodín. Esto elimina gran parte de la molestia del servidor y la administración de DNS.

Registro DNS Wild-Card (Wiki)

Con el registro DNS comodín en su lugar, puede usar HTTP_HOST, o el método CakePHP, $ request-> host () para determinar el nombre de host (subdominio) que se utiliza para acceder a su sistema. A continuación, puede cargar los detalles de perfil correctos en el método beforeFilter () de AppController y avanzar desde allí.

Hago algo similar:

class User extends AppModel { public $belongsTo = array( 'Profile' ); public function findByProfileHostname($hostname) { return $this->find('first', array('conditions' => array( 'Profile.hostname' => $hostname )); } }; class AppController extends Controller { public function beforeFilter () { $this->ActiveUser = $this->User->findByProfileHostname($this->request->host()); if (!$this->ActiveUser) { throw new InvalidArgumentsException(__('%s is not active here', $this->request->host())); } } } 

* descargo de responsabilidad: el código anterior ha sido escrito desde la memoria y puede no funcionar directamente a través de copiar / pegar.

Espero que esto ayude.

¡Es fácilmente factible! Un poco de scripting y configuración de hosting es todo lo que necesita:

Supongamos, ignorando los subdominios por el momento, que puede acceder a los perfiles de usuario en yoursite.com/users/view/id – convención estándar.

Todo lo que necesitamos hacer es mapear nombredeusuario.yoursite.com en la dirección correcta de yoursite.com/users/view/id, y esto debería suceder cada vez que un usuario se registre. Entonces, en los usuarios / agregar, tenemos que escribir un script que pueda acceder a los servidores ‘usuarios’ / ‘sitios disponibles’ (o equivalentes) y anexar al final de la configuración ya existente ‘yoursite.com’, o crea un nuevo ‘nombredeusuario.yoursite.com’ cada vez que un usuario se registre.

Ahora, la parte molesta: en el servidor, su aplicación necesitará permiso para leer / escribir en la carpeta de configuración de los servidores, además, el servidor también debe reiniciarse para un nuevo archivo conf: mis habilidades de administrador de sistemas solo van tan lejos y tendrá que encontrar fuera; ejecutando un script bash u otra cosa sobre cómo lograr que el servidor lea los nuevos archivos conf sin que se reinicie.

También asegúrese de que los archivos del servidor se actualicen si se cambia el nombre de usuario o si se elimina al usuario.

Ante todo. La creación de subdominios no tiene nada que ver con Cake, Mongo o PHP. Esto es un DNS y necesitas crear entradas DNS correctas. Ex:

 subdomain1 IN CNAME domain.com. subdomain1 IN A 123.2.33.45. 

Como @ e-sushi estaba señalando, esto lleva tiempo. Puede automatizar este proceso, pero no con PHP, pero con acceso raíz (en realidad puede hacerlo en PHP con shell_exec, pero esa es otra historia). Dependiendo de su alojamiento, esto puede ser bastante complicado y poco confiable en términos de tiempo.

Imagina el siguiente escenario. Se crea un usuario, pero él podrá acceder a la página web en algún momento entre 6 y 24 horas después. Tendrá que crear alguna ruta temporal por el momento y un escenario completo con lo que sucede con los datos y cómo los enlaces están apuntando … etc. Demasiado complicado.

Los mecanismos de enrutamiento de Cake son un mecanismo auxiliar que puede transformar una solicitud y resolverla en otra ruta utilizando una lógica interna. Entonces puede tomar algo como:

 yourwebsite.com/user/1 

Y transfórmalo a:

 joe.yourwebsite.com 

Pero este proceso es independiente de la creación y el mantenimiento de los subdominios.

En breve:

Auto-crear subdominios utilizando Cake PHP? Lo siento, pero eso no funcionará.

Más:

No llegarás adonde quieres ir usando la Clase de Rutas en Cake PHP. “Rutas” permite la configuración de rutas, pero no creará rutas o subdominios. Como dije: estás hablando de dos cosas diferentes: Cake PHP’s Routes Class = PHP based rewrites, a subdomain = DNS configuration of the server.

Antes de perder el tiempo pensando en DNS, tenga en cuenta que las nuevas entradas de DNS pueden tardar hasta 24 horas en activarse . Antes de que se pueda usar un nuevo (sub) dominio, se debe propagar. ¿Estás seguro de que eso es lo que quieres? Podría significar (pensando en el registro de usuarios) que los nuevos usuarios podrían registrarse pero no usar, o incluso llegar a su “nuevo” subdominio, porque aún no lo conocen muchos servidores DNS.

Pero … podrías intentar que los subdominios comodines funcionen si el tiempo de espera no es un problema para ti. Pero eso depende en gran medida de su proveedor de alojamiento web y lo que le permiten hacer. En caso de duda, contáctelos (después de que haya aprendido qué comodín DNS hace y si realmente desea usarlo).

Preguntas y respuestas similares se pueden encontrar aquí:

  • ¿Cómo creo un subdominio personal programáticamente con php?
  • ¿Cómo crearías subdominios con DNS automáticamente?

Pero solo puedo darle un buen consejo: piense dos veces antes de comenzar a seguir este camino. Podría ser demasiado irregular para usted y sus usuarios y luego habrá perdido un tiempo valioso que podría haber invertido mejor en la elaboración de opciones alternativas. Además, ¿qué pasa con una estructura de directorios decente? Ya sabes, los motores de búsqueda son conocidos por amar las estructuras de directorios decente más que las configuraciones de subdominios, ya que las estructuras de directorios son más lógicas cuando todos los datos están relacionados con un único sitio web. Incluso si ese sitio web es algo grande … como Facebook o Twitter. 😉