¿Cómo enrutar subdominios a páginas de cuenta? ¿Cómo funciona el enmascaramiento de dominio? [cerrado]

StackOverflow https://stackoverflow.com/questions/822100

Pregunta

Parte 1

Quiero crear una aplicación PHP Zend Framework que los usuarios puedan registrarse para usar. Cuando se registren, me gustaría que la aplicación cree un subdominio que apunte a su página pública, que sirva contenido específico para ese cliente.

Por ejemplo: http://mywebapp.com/username o http://username.mywebapp.com

Actualización: " Usar subdominios como claves de cuenta " es un buen tutorial que prácticamente respondió a mi pregunta sobre este. Esto implica el uso de Zend_Controller_Router_Route_Hostname .

Sin embargo, todavía me pregunto ...

Pregunta # 1: el tutorial no menciona la configuración de un subdominio comodín. ¿Es esto necesario para lograr esto? ¿Hay alguna forma de evitar el uso de un subdominio comodín?


Parte 2

También tendré que ofrecer a los usuarios la posibilidad de registrar nombres de dominio y señalarlos a su página. Entonces, si tuviera que ir a http://clientdomain.com , estaría viendo http://clientname.mywebapp.com , pero nunca podrás saberlo porque la url en la barra de direcciones muestra http://client1.com . ¿Tiene sentido? Creo que el proceso se llama enmascaramiento de dominio. Básicamente quiero ofrecer a mis usuarios enmascaramiento de dominio gratuito.

Actualización: acabo de descubrir el mundo de las API de revendedor de dominios. OpenSRS se ve bien. ¿Tienes uno para recomendar?

Pregunta # 2: ¿Cómo funciona el enmascaramiento de dominio? ¿Puede funcionar con una API de revendedor de dominio?

¿Fue útil?

Solución

Para la Parte 1 de su pregunta, puede implementar cualquiera de las soluciones aquí, pero no estoy seguro de que necesite un enrutador; no ofrecerá funciones diferentes para cada sitio; solo desea cargar contenido diferente en función del URL Manejamos esto de una manera bastante simple:

  1. En su bootstrap.php necesita tomar la URL del servidor
  2. Tome la URL y elimine la porción después de http: // y antes de .mywebapp.com
  3. Busque este prefijo en una tabla de base de datos y cargue cualquier información que necesite sobre el usuario u otra información relacionada con este prefijo
  4. Coloque un objeto en Zend_Config al que pueda acceder desde cualquier página con los detalles del sitio (lo llamamos información del sitio).
  5. Modifique sus controladores o vistas para responder de manera diferente según la información del sitio, es decir. cambiar qué datos recuperan, etc.

Tendrá que modificar Apache para manejar esto, y la forma más fácil es asegurarse de que su dominio predeterminado (las páginas que aparecen cuando no se reconoce una URL) esté configurado en su aplicación.

Manejar los cambios de DNS no es tan fácil: debe tener un servidor DNS que pueda manejar respuestas comodín.

Parte 2: Creo que está diciendo que si ingreso la URL http://grouchal.com eso redirigirá a http://grouchal.yourwebapp.com . Esto requeriría que actualice las entradas de servidor DNS existentes para grouchal.com para que se encuentre su servidor.

Si desea ver un buen ejemplo de cómo funciona en la práctica, debe configurar una aplicación de Google para su cuenta de dominio. Tengo URL como mail.grouchal.com que una vez ingresadas se convierten en mail.google.com/a/grouchal.com. Esto me obligó a configurar el servidor DNS grouchal.com para apuntar a un servidor de Google. El servidor de Google coloca una redirección para cambiar la URL a la que necesitan.

Volviendo a la solución que propuse anteriormente, la modificaría para que además de verificar el prefijo para cuando su nombre de dominio esté allí (es decir, eliminar el grouchal de http://grouchal.mywebapp.com ) también buscaría dominios alternativos. Entonces, si no hay mywebapp.com en la dirección, buscaría en la base de datos grouchal.com y luego configuraría la información del sitio utilizando esos datos.

Espero que esto tenga sentido: los problemas que tendrá no estarán en PHP sino en la configuración de su servidor DNS wildcat y en hacer que sus clientes configuren sus servidores DNS correctamente. Buena suerte con el proyecto, sin embargo.

Otros consejos

Primero, tienes razón. No desea múltiples instancias / instalaciones de su aplicación. Configure múltiples hosts virtuales Apache para apuntar a la raíz del documento.

ServerName  www.serverOne.com
DocumentRoot "/htdocs/myapp/public"
SetEnv CONFIG_ENV "serverOne"   

ServerName www.serverTwo.com
DocumentRoot "/htdocs/myapp/public"    
SetEnv CONFIG_ENV "serverTwo"   

Ponga todas sus URL, rutas, etc. de base en diferentes secciones de un archivo Zend_Config_Xml.

<?xml version="1.0" standalone="yes"?>
<config>
<siteOne>
   <base_url>http://www.siteOne.com</base_url>
       <image_path>/images/siteOne/</image_path>
       <database>
          <host>34.23.34.457</host>
          <name>siteOne_DB</name>
          <user>siteOne</user>
          <pass>**********</pass>
       </database>
    </siteOne>
    <siteTwo>
   <base_url>http://www.siteTwo.com</base_url>
       <image_path>/images/siteTwo/</image_path>
       <database>
          <host>34.23.34.456</host>
          <name>siteTwo_DB</name>
          <user>siteTwo</user>
          <pass>**********</pass>
       </database>
    </siteTwo>
</config>

Luego en su /public/index.php

<?php
require '../common/config/Bootstrap.php';
$bootstrap = new Bootstrap($_SERVER['CONFIG_ENV']);
$bootstrap->runApp();
?>

Y en el método runApp () de Bootstrap.php:

function runApp($env)
{
   $root   = realpath(dirname(__FILE__) . '/..');
   $config = new Zend_Config_Xml($root . '/config.xml', $env);

Esto funcionará perfectamente con enlaces relativos, y no requiere ninguna coincidencia de patrón :)

Si no tiene un archivo Bootstrap.php, puede aprender a crear & amp; úselo en el " de Manning Press; Zend Framework In Action " libro, disponible al instante como descarga en PDF. Me ayudó en algunos momentos difíciles.

Dado que Zend Framework utiliza el patrón MVC, puede tener modelos y controladores únicos y luego diferentes vistas para cada dominio.

Después de tener vistas personalizadas, puede detectar el dominio escrito y mostrar las vistas correctas. Por ejemplo, en su rutina de arranque puede detectar el dominio de esta manera:

// Bootstrap or controller
$domain = array_reverse(split('[.]', $_SERVER['SERVER_NAME']));
$domain = $domain[1] . '.' . $domain[0];

// Store domain in registry
Zend_Registry::set('domain', $domain);


// Calling the view from the controller
$domain = Zend_Registry::get('domain');
$this->render($domain . 'home');

¡Es justo e idea!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top