Come consentire a PHP di creare automaticamente un sottodominio per ciascun utente?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Come posso creare un sottodominio come http://user.mywebsite.com ? Devo accedere a htaccess in qualche modo? In realtà è semplicemente possibile crearlo tramite puro codice php o devo usare un linguaggio esterno di script-server esterno?

A chi ha risposto: Beh, allora dovrei chiedere al mio hosting se forniscono una sorta di accesso DNS ??

È stato utile?

Soluzione

Stai cercando di creare un A record .

personalizzato

Sono abbastanza sicuro che puoi usare i caratteri jolly quando specifichi i record A che ti permetterebbero di fare qualcosa del genere:

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1 sarebbe l'indirizzo IP del tuo server web. Il metodo per aggiungere effettivamente il record dipenderà dal tuo host.


Farlo come http://mywebsite.com/user sarebbe molto più semplice da impostare se è un'opzione.

Quindi potresti semplicemente aggiungere un file .htaccess che assomiglia a questo:

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([aA-zZ])$  dostuff.php?username=$1

In quanto sopra, i nomi utente sono limitati ai caratteri a-z


La regola di riscrittura per afferrare il sottodominio sarebbe simile a questa:

RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.com
RewriteRule (.*)  dostuff.php?username=%1

Altri suggerimenti

La funzione che stai cercando si chiama Sottodomini jolly . Ti consente di non dover impostare il DNS per ciascun sottodominio e di utilizzare invece le riscritture di Apache per il reindirizzamento. Puoi trovare un bel tutorial qui , ma ci sono migliaia di tutorial là fuori. Ecco il codice necessario da quel tutorial:

<VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.domain.tld
    ServerAlias *.domain.tld
</VirtualHost>

Tuttavia, poiché richiedeva l'uso di VirtualHosts, deve essere impostato nel file httpd.conf del server, anziché in un .htaccess locale.

Lo faccio un po 'diverso da Mark. Passo l'intero dominio e afferro il sottodominio in php.

RewriteCond {REQUEST_URI} !\.(png|gif|jpg)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?uri=$1&hostName=%{HTTP_HOST}

Questo ignora le immagini e mappa tutto il resto sul mio file index.php. Quindi, se vado a

http://fred.mywebsite.com/album/Dance/now

Torno

http://fred.mywebsite.com/index.php?uri=album/Dance/now&hostName=fred.mywebsite.com

Quindi nel mio codice index.php ho appena fatto esplodere il mio nome utente da hostName. Questo mi dà dei simpatici URL SEO.

Configuriamo DNS con caratteri jolly come spiegato sopra. Quindi il record è * .yourname.com

Quindi tutti i sottodomini stanno andando nello stesso posto, ma PHP tratta ogni sottodominio come un account diverso.

Utilizziamo il seguente codice:

$url=

Configuriamo DNS con caratteri jolly come spiegato sopra. Quindi il record è * .yourname.com

Quindi tutti i sottodomini stanno andando nello stesso posto, ma PHP tratta ogni sottodominio come un account diverso.

Utilizziamo il seguente codice:

<*>

Questo codice imposta semplicemente la variabile $ account sullo stesso sottodominio. È quindi possibile recuperare i loro file e altre informazioni in base al loro account.

Questo probabilmente non è efficiente come i modi sopra elencati, ma se non hai accesso a BIND e / o .htaccess limitato questo metodo dovrebbe funzionare (purché il tuo host configuri il carattere jolly per te) .

In realtà utilizziamo questo metodo per connetterci al database dei clienti per un'applicazione di e-commerce multi-azienda, ma potrebbe funzionare anche per te.

SERVER["REQUEST_URI"]; $account=str_replace(".yourdomain.com","",$url);

Questo codice imposta semplicemente la variabile $ account sullo stesso sottodominio. È quindi possibile recuperare i loro file e altre informazioni in base al loro account.

Questo probabilmente non è efficiente come i modi sopra elencati, ma se non hai accesso a BIND e / o .htaccess limitato questo metodo dovrebbe funzionare (purché il tuo host configuri il carattere jolly per te) .

In realtà utilizziamo questo metodo per connetterci al database dei clienti per un'applicazione di e-commerce multi-azienda, ma potrebbe funzionare anche per te.

Non scherzare con i file .htaccess quando è possibile utilizzare Apache mass virtual che ospita .

Dalla documentazione:

  

#include parte del nome del server nei nomi dei file   VirtualDocumentRoot / www / hosts /% 2 / docs

In un certo senso è il contrario della tua domanda: ogni "sottodominio" è un utente. Se l'utente non esiste, ottieni un 404.

L'unico inconveniente è che la variabile di ambiente DOCUMENT_ROOT non è impostata correttamente sulla sottodirectory utilizzata , ma la root_documento predefinita in de htconfig.

Soluzione PHP semplice per sottodomini e app Web multi-dominio

Passaggio 1. Fornisci il record DNS A come " * " per i domini (o domini) servirai " example.org "

A record => *.example.org
A record => *.example.net

Passaggio 2. Verificare l'unicità degli accessi quando l'utente registra o modifica l'accesso. Inoltre, evita i punti in questi accessi.

Passaggio 3. Quindi controllare la query     

        // Request was http://qwerty.example.org
        $q = explode('.', 

Soluzione PHP semplice per sottodomini e app Web multi-dominio

Passaggio 1. Fornisci il record DNS A come " * " per i domini (o domini) servirai " example.org "

A record => *.example.org
A record => *.example.net

Passaggio 2. Verificare l'unicità degli accessi quando l'utente registra o modifica l'accesso. Inoltre, evita i punti in questi accessi.

Passaggio 3. Quindi controllare la query     

qwerty.example.org
qwerty.example.net 

johnsmith.somecompany.com
paulsmith.somecompany.com

Questa soluzione può servire domini diversi

smith.example.org // Show info about John Smith
smith.example.net // Show info about Paul Smith 

Se hai bisogno degli stessi nick su domini diversi offerti in modo diverso, potrebbe essere necessario memorizzare la scelta dell'utente per il dominio durante la registrazione dell'accesso.

<*>SERVER['HTTP_HOST']); /* We get following array Array ( [0] => qwerty [1] => example [2] => org ) */ // Step 4. // If second piece of array exists, request was for // SUBDOMAIN which is stored in zero-piece $q[0] // otherwise it was for DOMAIN if(isset($q[2])) { // Find stuff in database for login $q[0] or here it is "qwerty" // Use $q[1] to check which domain is asked if u serve multiple domains } ?>

Questa soluzione può servire domini diversi

<*>

Se hai bisogno degli stessi nick su domini diversi offerti in modo diverso, potrebbe essere necessario memorizzare la scelta dell'utente per il dominio durante la registrazione dell'accesso.

<*>

Potresti [potenzialmente] riscrivere l'URL, ma sì: devi avere il controllo delle tue impostazioni DNS in modo che quando un utente viene aggiunto ottenga il suo sottodominio.

Oltre alle modifiche di configurazione sul tuo server WWW per gestire il nuovo sottodominio, il tuo codice dovrebbe apportare modifiche ai tuoi record DNS. Quindi, a meno che tu non stia eseguendo il tuo BIND (o simile), dovrai capire come accedere alla configurazione del provider del tuo server dei nomi. Se non offrono una sorta di API, questo potrebbe diventare complicato.

Aggiornamento: sì, vorrei verificare con il tuo registrar se stanno fornendo anche il servizio del server dei nomi (come spesso accade). Non ho mai esplorato questa opzione prima, ma sospetto che la maggior parte dei registrar dei consumatori non lo faccia. Ho cercato su Google le API di GoDaddy e le API DNS di GoDaddy ma non sono stato in grado di alzare nulla, quindi credo che l'opzione migliore sarebbe quella di consultare la guida in linea con il tuo provider e, se ciò non risponde alla domanda, ottenere una sospensione del personale di supporto.

Innanzitutto, è necessario assicurarsi che il server sia configurato per consentire i sottodomini con caratteri jolly. L'ho raggiunto in JustHost creando un sottodominio chiamato manualmente * . Ho anche specificato una cartella denominata sottodomini come radice del documento per i sottodomini con caratteri jolly. Aggiungi questo a un file .htaccess nella tua cartella dei sottodomini:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

Infine, tutto ciò che devi fare è creare una cartella nella cartella dei sottodomini, quindi posizionare i file del sottodominio in quella directory.

Ciò può essere ottenuto in .htaccess purché il server sia configurato per consentire i sottodomini jolly. L'ho raggiunto in JustHost creando un sottodominio manualmente chiamato * e specificando una cartella denominata sottodomini come radice del documento per i sottodomini jolly. Aggiungi questo al tuo file .htaccess :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

Infine, crea una cartella per il tuo sottodominio e posiziona i file dei sottodomini.

Volevo solo aggiungere che se usi CloudFlare (gratuito), puoi usare la loro API per gestire facilmente i tuoi dns.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top