Como rota sub-domínios para explicar páginas? Como é de domínio mascarando trabalho? [fechadas]

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

Pergunta

Parte 1

Eu quero construir uma aplicação PHP Zend Framework que os usuários podem se inscrever para uso. Quando se registarem, eu gostaria que o aplicativo para criar um sub-domínio que aponta para sua página do público, que serve conteúdo específico para esse cliente.

Por exemplo: http://mywebapp.com/username ou http://username.mywebapp.com

Update: "Usando sub-domínios como conta chaves" é um bom tutorial que praticamente respondeu à minha pergunta sobre este. Isso envolve o uso Zend_Controller_Router_Route_Hostname .

No entanto, eu ainda estou querendo saber ...

Pergunta # 1: o tutorial não menciona a criação de um sub-domínio curinga. É este o fim in necessário para conseguir isso? Existe alguma maneira em torno de usar um subdomínio curinga?


Parte 2

Eu também terá que oferecer aos usuários a capacidade de registrar nomes de domínio e apontá-los para sua página. Então, se você fosse para ir para http://clientdomain.com , você estaria vendo http://clientname.mywebapp.com , mas você nunca seria capaz de dizer porque a url nos shows barra de endereços http://client1.com . Isso faz sentido? Eu acho que o processo é chamado de domínio mascaramento. Basicamente, eu quero oferecer meus usuários mascaramento de domínio gratuitamente.

Update: Eu só descobri o mundo do domínio de revendedor APIs. OpenSRS parece bom. Você tem um para recomendar?

Pergunta nº 2 : Como funciona o domínio mascaramento? ele pode trabalhar com um domínio de revendedor API?

Foi útil?

Solução

Para Parte 1 da sua pergunta você pode implementar qualquer uma das soluções aqui - mas eu não tenho certeza que você precisa de um roteador - você não vai oferecer uma série de funções diferentes para cada local - você só quer carregar conteúdo diferente com base no URL. Nós lidar com isso de uma maneira bem simples:

  1. Na sua bootstrap.php você precisa pegar o servidor URL
  2. Leve o URL e retirar a parte após http: // e antes .mywebapp.com
  3. Lookup esse prefixo em uma tabela de banco de dados e carregar qualquer informação que você precisa sobre o usuário ou outras informações a ver com esse prefixo
  4. Coloque um objeto em Zend_Config que você pode, então, o acesso a partir de qualquer página com os detalhes do site (chamamos isso siteinfo).
  5. Modificar seus controladores ou vistas a responder de forma diferente com base em siteinfo - ie. mudança que dados recuperar etc

Você precisará modificar apache para lidar com isso. - E a maneira mais fácil é para se certificar de seu domínio padrão (as páginas que surgem quando uma URL não é reconhecida) está definido para o aplicativo

Como manusear as alterações de DNS que não é fácil -. Você precisa ter um servidor DNS que pode lidar com respostas curinga

Parte 2: Eu acho que você está dizendo que se eu digitar a URL http://grouchal.com que isso redirecionamento para http://grouchal.yourwebapp.com . Isso exigiria me para atualizar as entradas do servidor DNS existentes para grouchal.com para que o servidor se encontra.

Se você quer ver um bom exemplo deste trabalho na prática, você deve definir-se o Google Apps para a sua conta de domínio. Eu tenho urls como mail.grouchal.com que uma vez digitados tornam-se mail.google.com/a/grouchal.com. Isso obrigava-me a configurar o servidor grouchal.com DNS para apontar para um servidor do Google. O servidor do Google, em seguida, coloca um redirecionamento no lugar de mudar a URL para o que eles precisam.

Voltando à solução que propus acima, você iria modificá-lo para que, além de verificar o prefixo para quando o seu nome de domínio está lá (ou seja, eliminasse grouchal de http://grouchal.mywebapp.com ) seria também olhar para cima domínios alternados. Então, se não há mywebapp.com no endereço, em seguida, ele ficaria no banco de dados grouchal.com e defina a siteinfo usando esses dados.

Espero que isso faz sentido - os problemas que você terá não estará em PHP, mas na criação de seu servidor DNS wildcat e recebendo seus clientes para configurar seus servidores DNS corretamente. Boa sorte com o projeto embora.

Outras dicas

Em primeiro lugar, você está certo. Você não quer múltiplas instâncias / instalações do seu aplicativo. múltipla configuração Apache hosts virtuais para apontar para a raiz Doc.

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

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

Coloque todas as suas URLs base, caminhos, etc em diferentes seções de um arquivo 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>

Então em seu /public/index.php

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

E de em Bootstrap.php ExecutarAplicação ():

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

Isto irá funcionar perfeitamente com links relativos, e não requer qualquer correspondência padrão:)

Se você não tem um arquivo Bootstrap.php, você pode aprender a criar e uso em no livro "Zend Framework na ação" de Manning Press, disponível instantaneamente como um download PDF. Ele me ajudou a atravessar momentos difíceis.

Como Zend Framework usa o padrão MVC, você pode ter modelos e controladores individuais e, em seguida, pontos de vista diferentes para cada domínio.

Depois de ter vistas personalizadas, você pode detectar o domínio digitado e mostrar os pontos de vista corretos. Por exemplo, em seu bootstrap você pode detectar o domínio desta maneira:

// 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');

É apenas e idéia!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top