Comment router les sous-domaines vers les pages de compte? Comment fonctionne le masquage de domaine? [fermé]

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

Question

Partie 1

Je souhaite créer une application PHP Zend Framework accessible aux utilisateurs. Lors de leur inscription, je souhaite que l'application crée un sous-domaine pointant vers leur page publique et servant du contenu spécifique à ce client.

Par exemple: http://mywebapp.com/username ou http://username.mywebapp.com

Mise à jour: & "Utiliser les sous-domaines comme clés de compte &"; est un bon tutoriel qui a bien répondu à ma question à ce sujet. Ceci implique l'utilisation de Zend_Controller_Router_Route_Hostname .

Cependant, je me demande toujours ...

Question n ° 1: le didacticiel ne mentionne pas la configuration d'un sous-domaine générique. Est-ce nécessaire pour y parvenir? Existe-t-il un moyen de contourner un sous-domaine générique?

Partie 2

Je devrai également offrir aux utilisateurs la possibilité d’enregistrer des noms de domaine et de les diriger vers leur page. Donc, si vous deviez aller sur http://clientdomain.com , vous verriez http://clientname.mywebapp.com , mais vous ne pourrez jamais le savoir car l'URL de la barre d'adresse affiche http://client1.com . Cela a-t-il du sens? Je pense que le processus s'appelle le masquage de domaine. Je souhaite essentiellement proposer à mes utilisateurs un masquage de domaine gratuit.

Mise à jour: je viens de découvrir le monde des API de revendeur de domaine. OpenSRS est agréable. En avez-vous un à recommander?

Question n ° 2: Comment fonctionne le masquage de domaine? Peut-il fonctionner avec une API de revendeur de domaine?

Était-ce utile?

La solution

Pour la partie 1 de votre question, vous pouvez appliquer l’une des solutions ici - mais je ne suis pas sûr que vous ayez besoin d’un routeur - vous n’offrerez pas de fonctions différentes pour chaque site. Vous souhaitez simplement charger un contenu différent en fonction de la URL Nous traitons cela d'une manière assez simple:

  1. Dans votre fichier bootstrap.php, vous devez récupérer l'URL du serveur
  2. Prenez l'URL et supprimez la partie après http: // et avant .mywebapp.com
  3. Recherchez ce préfixe dans une table de base de données et chargez les informations relatives à l'utilisateur ou autres informations relatives à ce préfixe
  4. .
  5. Placez un objet dans Zend_Config auquel vous pourrez ensuite accéder depuis n'importe quelle page contenant les détails du site (nous appelons cette information de site).
  6. Modifiez vos contrôleurs ou vos vues pour répondre différemment en fonction de siteinfo - c'est-à-dire. changer les données récupérées, etc.

Vous devrez modifier apache pour gérer cela - et le plus simple est de vous assurer que votre domaine par défaut (les pages qui apparaissent lorsqu'une URL n'est pas reconnue) est défini sur votre application.

La gestion des modifications DNS n’est pas si simple. Vous devez disposer d’un serveur DNS capable de gérer les réponses génériques.

Partie 2: Je pense que vous dites que si j'entre l'URL http://grouchal.com , cela sera redirigé vers http://grouchal.yourwebapp.com . Cela nécessiterait que je mette à jour les entrées de serveur DNS existantes pour grouchal.com afin que votre serveur soit trouvé.

Si vous souhaitez voir un bon exemple de ce fonctionnement dans la pratique, vous devez configurer une application Google pour votre compte de domaine. J'ai des URLs comme mail.grouchal.com qui une fois tapées deviennent mail.google.com/a/grouchal.com. Cela m'a obligé à configurer le serveur DNS grouchal.com pour qu'il pointe vers un serveur Google. Le serveur Google met ensuite en place une redirection permettant de modifier l’URL qui convient.

En revenant à la solution que j'ai proposée ci-dessus, vous la modifieriez de sorte qu'en plus de vérifier le préfixe indiquant le moment où votre nom de domaine est présent (par exemple, en supprimant grouchal de http://grouchal.mywebapp.com ), il rechercherait également des domaines de remplacement. Donc, s’il n’ya pas mywebapp.com dans l’adresse, elle le rechercherait dans la base de données grouchal.com, puis définirait le siteinfo en utilisant ces données.

J'espère que cela a du sens - les problèmes que vous rencontrerez ne seront pas en PHP mais en configurant votre serveur DNS wildcat et en obligeant vos clients à configurer correctement leurs serveurs DNS. Bonne chance avec le projet cependant.

Autres conseils

D'abord, vous avez raison. Vous ne voulez pas plusieurs instances / installations de votre application. Configurez plusieurs hôtes virtuels Apache pour qu'ils pointent vers la racine du document.

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

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

Placez toutes vos URL de base, vos chemins, etc. dans différentes sections d'un fichier 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>

Puis dans votre /public/index.php

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

Et dans la méthode runApp () de Bootstrap.php:

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

Cela fonctionnera parfaitement avec les liens relatifs et ne nécessite aucune correspondance de modèle:)

Si vous n'avez pas de fichier Bootstrap.php, vous pouvez apprendre à créer & amp; utiliser sur dans " Zend Framework In Action " de Manning Press livre, disponible instantanément en téléchargement PDF. Cela m'a aidé à traverser des moments difficiles.

Comme Zend Framework utilise le modèle MVC, vous pouvez avoir des modèles et des contrôleurs uniques, puis différentes vues pour chaque domaine.

Après avoir personnalisé les vues, vous pouvez détecter le domaine saisi et afficher les vues correctes. Par exemple, dans votre boot, vous pouvez détecter le domaine de la manière suivante:

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

C'est juste et idée!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top