Question

Je sais qu'il y a eu quelques discussions à ce sujet auparavant, mais j'ai essayé absolument tout ce qui était suggéré (que je pouvais trouver) et rien n'a fonctionné pour moi jusqu'à présent ...

Dans cet esprit, voici ce que j'essaie de faire:

Tout d'abord, je souhaite autoriser les utilisateurs à publier des pages et leur attribuer chacun un sous-domaine de leur choix (ex: utilisateur.mysite.com). D'après ce que je peux comprendre, la meilleure façon de faire est de mapper user.mysite.com sur mysite.com/user avec mod_rewrite et .htaccess - est-ce correct?

Si cela est correct, quelqu'un peut-il me donner des instructions explicites sur la procédure à suivre?

De plus, je fais tout mon développement localement, en utilisant MAMP, donc si quelqu'un pouvait me dire comment configurer mon environnement local pour qu'il fonctionne de la même manière (j'ai lu que c'était plus difficile), je le ferais grandement. l'apprécie. Honnêtement, j'ai tout essayé en vain, et comme c'est la première fois que je fais quelque chose comme ça, je suis complètement perdu. Merci beaucoup pour toute aide!

Mise à jour: Certaines de ces réponses ont été VRAIMENT utiles, mais pour le système auquel je pense, ajouter manuellement un sous-domaine pour chaque utilisateur n'est pas une option. Ce que je demande vraiment, c'est comment faire cela à la volée, et rediriger wildcard.mysite.com vers mysite.com/wildcard - la façon dont Tumblr est configuré est un exemple parfait de ce que j'aimerais faire. Merci encore!

Était-ce utile?

La solution

En ce qui concerne la configuration du caractère générique de sous-domaine DNS, ce serait une fonction de votre fournisseur d’hébergement DNS. Ce serait différentes étapes selon le fournisseur d'hébergement que vous avez et serait une meilleure question pour eux.

Une fois que vous avez configuré cela avec l'hôte DNS, vous ne faites que réécrire l'URL à partir de votre application Web, ce qui peut être fait avec une sorte de module pour le serveur Web lui-même, tel que isapi rewrite si vous êtes sur. IIS (ce serait l'itinéraire préféré si possible). Vous pouvez également gérer la réécriture au niveau de l'application (par exemple, en utilisant le routage si sur ASP.NET).

Vous réécririez l'URL pour que http://myname.domain.com devienne http://domain.com/something.aspx?name=myname ou quelque chose du genre. À partir de là, vous le gérez comme si la valeur myname était normalement dans la chaîne de requête. Cela a-t-il du sens? J'espère que je n'ai pas mal compris ce que vous recherchez.

Modifier:

Je ne suggère pas de créer un sous-domaine pour chaque utilisateur, mais plutôt de créer un sous-domaine générique pour le domaine lui-même. tout .domain.com (essentiellement * .domain.com) est attribué à votre site. Plusieurs mydomain sont installés dans plusieurs domaines. Leurs instructions pour l’installer sont les suivantes:

  

Oui, vous pouvez configurer un caractère générique mais   cela ne fonctionnera que si vous le configurez comme   un enregistrement A. Les jokers ne fonctionnent pas   avec un nom en C. Pour utiliser un joker, vous   utilisez le caractère astérisque '*'. Pour   exemple, si vous créez et un enregistrement   en utilisant un joker, .domain.com,   tout ce qui est entré à la place   où se trouve le '' va résoudre   à l'adresse IP spécifiée. Donc si tu   entrez 'www', 'ftp', 'site' ou   rien d'autre avant le nom de domaine,   il sera toujours résoudre à l'IP   adresse

J'en ai quelques-uns qui sont configurés de cette façon, après avoir * .domain.com aller sur mon site. Je peux ensuite lire l'URL de base dans mon application Web pour voir que ryan.domain.com est ce qui a été utilisé actuellement ou que bill.domain.com est ce qui a été utilisé. Je peux alors soit:

  1. Utilisez la réécriture d'URL pour que le sous-domaine fasse partie de la chaîne de requête OU
  2. Il suffit de lire la valeur de l'hôte à partir de l'URL consultée et d'effectuer une logique en fonction de cette valeur.

Est-ce que cela a du sens? J'ai plusieurs sites configurés exactement de cette manière: créez le caractère générique pour le domaine avec l'hôte DNS, puis lisez simplement l'hôte ou le domaine de base à partir de l'URL pour décider quoi afficher en fonction du sous-domaine (qui est en fait un nom d'utilisateur). )

Modifier 2:

Il n’ya aucun moyen de le faire sans une entrée DNS. Le " monde en ligne " doit savoir que nom1.domaine.com, nom2.domaine.com, ..., nomNomdomaine.com accède à l'adresse IP de votre serveur. La seule façon de procéder consiste à utiliser l'entrée DNS appropriée. Vous devez ajouter l'entrée DNS générique de votre domaine avec votre hôte DNS. Ensuite, il vous suffit de lire le sous-domaine à partir de l'URL et de prendre les mesures appropriées dans votre code.

Autres conseils

La meilleure chose à faire si vous utilisez * AMP est de faire ce que Thomas suggère et de faire des hôtes virtuels dans Apache. Vous pouvez le faire avec ou sans la redirection que vous décrivez.

Hôtes virtuels

Vous souhaiterez probablement effectuer des hôtes virtuels nommés . , car il est plus facile à configurer et ne nécessite qu’une seule adresse IP (il sera donc facile à configurer et à tester sur votre machine MAMP locale). Les hôtes virtuels basés sur IP sont meilleurs à certains autres égards, mais vous devez avoir une adresse IP pour chaque domaine.

Cette page Wikipedia décrit les différences et les liens menant à un guide détaillé expliquant comment faire des hôtes virtuels nommés en bas.

Sur votre ordinateur local à des fins de test, vous devez également configurer de faux noms DNS dans / etc / hosts pour vos faux noms de domaine de test. Autrement dit, si Apache écoute localhost et configure vhost1.test.domain et vhost2.test.domain dans vos configurations Apache, vous n'ajoutez que ces domaines à la ligne 127.0.0.1 dans / etc / hosts, après localhost:

127.0.0.1 localhost vhost1.test.domain vhost2.test.domain

Une fois que vous avez modifié / etc / hosts et ajouté la configuration de l'hôte virtuel basée sur le nom à votre (vos) fichier (s) de configuration Apache, redémarrez Apache et vos domaines de test devraient fonctionner.

Redirection avec mod_rewrite

Si vous souhaitez effectuer des redirections avec mod_rewrite (pour que user.example.com ne soit pas directement hébergé et qu'il soit redirigé vers example.com/user), vous devrez également créer un RewriteCond pour faire correspondre le sous-domaine et la redirection. ça:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]

Vous pouvez le mettre dans un fichier .htaccess ou dans votre configuration Apache principale.

Vous devrez ajouter une paire de règles comme les deux dernières pour chaque sous-domaine que vous souhaitez rediriger. Ou, vous pouvez peut-être capturer le sous-domaine dans un RewriteCond pour pouvoir utiliser une règle générique pour rediriger * .example.com vers example.com/ * - mais ça sent vraiment mauvais pour moi du point de vue de la sécurité.

Tous ensemble, vhosts et redirection

Il est préférable d’être plus explicite et de configurer une section de configuration d’hôte virtuel pour chaque nom d’hôte que vous souhaitez écouter et de placer les règles de réécriture de chacun de ces noms d’hôte dans sa configuration d’hôte virtuel. (Il est toujours plus sûr et plus rapide de mettre ce genre de choses dans votre configuration Apache et non pas .htaccess, si vous pouvez l’aider - .htaccess ralentit les performances car Apache recherche constamment dans le système de fichiers les fichiers .htaccess et les répare, et il est moins sécurisé car il peut être foutu par les utilisateurs.)

Tous ensemble, la configuration vhost dans vos configurations Apache serait:

NameVirtualHost 127.0.0.1:80

# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /www/siteroot
  # etc.
</VirtualHost>

# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost1.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>

# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost2.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>

Je me rends compte que je suis assez en retard pour répondre à cette question, mais j'avais le même problème en ce qui concerne une solution de développement local. Dans une autre discussion SO , j'ai trouvé de meilleures solutions et je pensais les partager avec tous ceux qui ont la même question à l'avenir:

Domaine de caractère générique appartenant à VMware qui résout n'importe quel sous-domaine en 127.0.0.1:

vcap.me resolves to 127.0.0.1
www.vcap.me resolves to 127.0.0.1

ou pour plus de polyvalence 37 Signals possède un domaine permettant de mapper tout sous-domaine vers une adresse IP donnée en utilisant un format spécifique:

127.0.0.1.xip.io resolves to 127.0.0.1
www.127.0.0.1.xip.io resolves to 127.0.0.1
db.192.168.0.1.xip.io resolves to 192.168.0.1

voir xip.io pour plus d'informations

Je suis sur Ubuntu 16.04 et depuis 14.04, j'utilise une solution fournie par Dave Evans ici et ça marche très bien pour moi.

  1. Installer Dnsmasq

    sudo apt-get install dnsmasq
    
  2. Créez un nouveau fichier localhost.conf sous /etc/dnsmasq.d avec la ligne suivante

    #file /etc/dnsmasq.d/localhost.conf
    address=/localhost/127.0.0.1
    
  3. Modifiez /etc/dhcp/dhclient.conf et ajoutez la ligne suivante

    prepend domain-name-servers 127.0.0.1;
    

    (Vous constaterez probablement que cette ligne existe déjà et qu'il vous suffit de la décommenter.)

  4. Le dernier est redémarrer le service

    sudo systemctl restart dnsmasq
    sudo dhclient
    

Enfin, vous devriez vérifier si cela fonctionne.

dig whatever.localhost

note:

Si vous souhaitez l’utiliser sur votre serveur Web, vous devez simplement remplacer le 127.0.0.0 par votre adresse IP actuelle.

Je devais faire exactement la même chose pour l'un de mes sites. Vous pouvez suivre les étapes suivantes

  1. Si cPanel est installé sur votre serveur, créez un sous-domaine * . Sinon, vous devrez configurer un enregistrement A dans votre DNS (pour BIND, voir http://ma.tt/2003/10/wildcard-dns-and -sous-domaines / ). Sur votre dev. serveur, vous feriez bien mieux de simuler des sous-domaines en les ajoutant chacun à votre fichier hôtes .

  2. (Si vous avez utilisé cPanel, vous n’avez pas à le faire). Vous devrez ajouter quelque chose comme ceci à votre fichier apache vhosts. Cela dépend en grande partie du type de serveur (partagé ou non) que vous utilisez. LE CODE SUIVANT N'EST PAS COMPLET. C'EST JUSTE DE DONNER DIRECTION. REMARQUE: exemple de ServerAlias.com * .example.com est important.

    <VirtualHost 127.0.0.1:80>  
            DocumentRoot /var/www/  
            ServerName example.com  
            ServerAlias example.com *.example.com  
    </VirtualHost>
    
  3. Ensuite, puisque vous pouvez utiliser le script PHP pour vérifier l’option "Hôte". en-tête et découvrez le sous-domaine et servez le contenu en conséquence.

  

Tout d'abord, je veux permettre aux utilisateurs de   publier des pages et leur donner à chacun un   sous-domaine de leur choix (ex:   utilisateur.mysite.com). De ce que je peux   rassembler, la meilleure façon de faire est de   mappez user.mysite.com à mysite.com/user   avec mod_rewrite et .htaccess - est   ce correct?

Il vaut peut-être mieux utiliser des hôtes virtuels . Ainsi, chaque utilisateur peut avoir une configuration de serveur Web assez indépendante des autres.

La syntaxe ressemble à ceci:

<VirtualHost *:80>
    DocumentRoot /var/www/user
    ServerName user.mysite.com
    ...
</VirtualHost>

D'après ce que j'ai vu sur de nombreux hôtes Web, ils ont configuré un hôte virtuel sur Apache.

Ainsi, si votre site www.monsite.com est servi à partir de / var / www, vous pouvez créer un dossier pour chaque utilisateur. Mappez ensuite l'hôte virtuel sur ce dossier.

Avec cela, mysite.com/user et user.mysite.com fonctionnent.

En ce qui concerne votre environnement de test, si vous êtes sous Windows, je vous suggère de modifier votre fichier HOSTS pour mapper mysite.com sur votre PC local (127.0.0.1), ainsi que pour tous les sous-domaines que vous avez configurés pour les tests.

La solution que j'ai trouvée pour Ubuntu 18.04 est similaire à celle-ci mais implique la configuration de NetworkManager:

  1. Modifiez le fichier /etc/NetworkManager/NetworkManager.conf et ajoutez la ligne dns = dnsmasq au [principal] section

    sudo editor /etc/NetworkManager/NetworkManager.conf
    

    devrait ressembler à ceci:

    [main]
    plugins=ifupdown,keyfile
    dns=dnsmasq
    ...
    
  2. Commencez à utiliser le fichier resolv.conf de NetworkManager

    sudo rm /etc/resolv.conf
    sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
    
  3. Créez un fichier avec votre configuration générique

    echo 'address=/.localhost/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/localhost-wildcard.conf
    
  4. Recharger la configuration de NetworkManager

    sudo systemctl reload NetworkManager
    
  5. Testez-le

    dig localdomain.localhost
    

Vous pouvez également ajouter tout autre domaine utile pour certains types d'authentification lors de l'utilisation d'une configuration de développement local.

echo 'address=/.local-dev.workdomain.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/workdomain-wildcard.conf

Ensuite, cela fonctionne:

dig petproject.local-dev.workdomain.com

;; ANSWER SECTION:
petproject.local-dev.workdomain.com. 0 IN   A   127.0.0.1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top