Domanda

So che ci sono già stati alcuni thread a riguardo, ma ho provato assolutamente tutto ciò che è stato suggerito (che ho trovato) e finora non ha funzionato per me...

Con questo in mente, ecco cosa sto cercando di fare:

Innanzitutto, voglio consentire agli utenti di pubblicare pagine e assegnare a ciascuno un sottodominio di loro scelta (es:utente.miosito.com).Da quello che ho capito, il modo migliore per farlo è mappare user.mysite.com su mysite.com/user con mod_rewrite e .htaccess: è corretto?

Se è corretto, qualcuno può darmi istruzioni esplicite su come farlo?

Inoltre, sto eseguendo tutto il mio sviluppo localmente, utilizzando MAMP, quindi se qualcuno potesse dirmi come impostare il mio ambiente locale in modo che funzioni nello stesso modo (ho letto che è più difficile), lo apprezzerei molto.Onestamente, ho provato di tutto senza alcun risultato e, poiché è la prima volta che faccio qualcosa del genere, sono completamente perso.Grazie mille per qualsiasi aiuto!

Aggiornamento: Alcune di queste risposte sono state DAVVERO utili, ma per il sistema che ho in mente, aggiungere manualmente un sottodominio per ogni utente non è un'opzione.Quello che sto veramente chiedendo è come farlo al volo e reindirizzare wildcard.mysite.com a mysite.com/wildcard: il modo in cui è impostato Tumblr è un perfetto esempio di ciò che mi piacerebbe fare.Grazie ancora!

È stato utile?

Soluzione

Per quanto riguarda come impostare il carattere jolly del sottodominio DNS, questa sarebbe una funzione del tuo provider di hosting DNS.Si tratta di passaggi diversi a seconda del provider di hosting di cui disponi e sarebbe una domanda migliore per loro.

Una volta configurato con l'host DNS, dalla tua app Web stai semplicemente riscrivendo l'URL, che può essere eseguita con una sorta di modulo per il server Web stesso, come la riscrittura isapi se sei su IIS (questo sarebbe il percorso preferito, se possibile).Potresti anche gestire la riscrittura anche a livello di applicazione (come usare il routing se su ASP.NET).

Riscriveresti l'URL così http://mionome.dominio.com potrebbe diventare http://dominio.com/qualcosa.aspx?name=mionome o qualcosa.Da lì in poi, gestisci la cosa come se il valore myname fosse normalmente nella stringa di query.Ha senso?Spero di non aver frainteso cosa stai cercando.

Modificare:

Non sto suggerendo di creare un sottodominio per ogni utente, ma piuttosto di creare un sottodominio con caratteri jolly per il dominio stesso, quindi nulla.domain.com (sostanzialmente *.domain.com) va al tuo sito.Ho diversi domini configurati con miodominio.Le loro istruzioni per configurarlo sono così:

Sì, puoi configurare un jolly ma funzionerà solo se lo si imposta come record A.I caratteri jolly non funzionano con un nome C.Per usare un jolly, usi il personaggio di Astericks '*'.Ad esempio, se si crea e un record utilizzando un jolly, .domain.com, tutto ciò che viene inserito nel luogo in cui "'Si trova, si risolverà all'indirizzo IP specificato.Quindi, se si inserisce "www", "ftp", "sito" o qualsiasi altra cosa prima del nome di dominio, si risolverà sempre all'indirizzo IP

Ne ho alcuni configurati proprio in questo modo, facendo in modo che *.domain.com vada al mio sito.Posso quindi leggere l'URL di base nella mia app Web per vedere che ryan.domain.com è ciò a cui si accede attualmente o che bill.domain.com è ciò che è stato utilizzato.Posso quindi:

  1. Utilizza la riscrittura dell'URL in modo che il sottodominio diventi parte della stringa di query OR
  2. Basta leggere il valore dell'host dall'URL a cui si accede ed eseguire una logica basata su quel valore.

Ha senso?Ho diversi siti impostati proprio in questo modo esatto:creare il carattere jolly per il dominio con l'host DNS e poi leggere semplicemente l'host, o dominio di base, dall'URL per decidere cosa visualizzare in base al sottodominio (che in realtà era un nome utente)

Modifica 2:

Non è possibile farlo senza una voce DNS.Il "mondo online" deve sapere che nome1.dominio.com, nome2.dominio.com,...,nomeN.dominio.com vanno tutti all'indirizzo IP del tuo server.L'unico modo per farlo è con la voce DNS appropriata.Devi aggiungere la voce DNS jolly per il tuo dominio con il tuo host DNS.Quindi è solo questione di leggere il sottodominio dall'URL ed eseguire l'azione appropriata nel codice.

Altri suggerimenti

La cosa migliore da fare se stai utilizzando *AMP è fare ciò che suggerisce Thomas e creare host virtuali in Apache.Puoi farlo con o senza il reindirizzamento che descrivi.

Host virtuali

Molto probabilmente vorrai farlo host virtuali basati sul nome, poiché è più semplice da configurare e richiede solo un indirizzo IP (quindi sarà facile anche da configurare e testare sul tuo computer MAMP locale).Gli host virtuali basati su IP sono migliori sotto altri aspetti, ma devi avere un indirizzo IP per ciascun dominio.

Questo Pagina Wikipedia in basso vengono discusse le differenze e i collegamenti a una buona guida di base su come realizzare vhost basati sui nomi.

Sul tuo computer locale per il test, dovrai anche impostare nomi DNS falsi in /etc/hosts per i tuoi nomi di dominio di prova falsi.cioè.se hai Apache in ascolto su localhost e imposti vhost1.test.domain e vhost2.test.domain nelle tue configurazioni Apache, dovresti semplicemente aggiungere questi domini alla riga 127.0.0.1 in /etc/hosts, dopo localhost:

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

Dopo aver eseguito la modifica di /etc/hosts e aggiunto le configurazioni dell'host virtuale basate sul nome ai file di configurazione di Apache, è tutto, riavvia Apache e i tuoi domini di prova dovrebbero funzionare.

Reindirizzamento con mod_rewrite

Se desideri eseguire reindirizzamenti con mod_rewrite (in modo che user.example.com non sia ospitato direttamente e reindirizzi invece a example.com/user), dovrai anche eseguire un RewriteCond per abbinare il sottodominio e reindirizzarlo:

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

Puoi inserirlo in un .htaccess o nella configurazione principale di Apache.

Dovrai aggiungere un paio di regole come le ultime due per ogni sottodominio che desideri reindirizzare.Oppure, potresti essere in grado di catturare il sottodominio in un riscrittura per poter usare una regola jolly per reindirizzare * .example.com per esempio.com/ * - ma questo ha un odore davvero male per un punto di vista della sicurezza.

Tutti insieme, vhost e reindirizzamento

È meglio essere più espliciti e impostare una sezione di configurazione dell'host virtuale per ciascun nome host che desideri ascoltare e inserire le regole di riscrittura per ciascuno di questi nomi host all'interno della relativa configurazione dell'host virtuale.(È sempre più sicuro e veloce inserire questo tipo di cose nella configurazione di Apache e non in .htaccess, se puoi aiutarlo: .htaccess rallenta le prestazioni perché Apache esamina costantemente il filesystem alla ricerca di file .htaccess e li analizza, e è meno sicuro perché questi possono essere rovinati dagli utenti.)

Tutto insieme in questo modo, la configurazione di vhost all'interno delle tue configurazioni di Apache sarebbe:

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>

Mi rendo conto che sono in ritardo nel rispondere a questa domanda, ma ho avuto lo stesso problema riguardo a una soluzione di sviluppo locale.In un altro thread SO Ho trovato soluzioni migliori e ho pensato di condividerle per chiunque avesse la stessa domanda in futuro:

Dominio jolly di proprietà di VMware che risolve qualsiasi sottodominio in 127.0.0.1:

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

o per una maggiore versatilità 37 Signals possiede un dominio per mappare qualsiasi sottodominio a un dato IP utilizzando un formato specifico:

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

Vedere xip.io per maggiori informazioni

Sono su Ubuntu 16.04 e dal 14.04 utilizzo la soluzione fornita da Dave Evans Qui e funziona bene per me.

  1. Installare dnsmasq

    sudo apt-get install dnsmasq
    
  2. Crea nuovo file localhost.conf Sotto /etc/dnsmasq.d dir con la riga seguente

    #file /etc/dnsmasq.d/localhost.conf
    address=/localhost/127.0.0.1
    
  3. Modificare /etc/dhcp/dhclient.conf e aggiungi la riga seguente

    prepend domain-name-servers 127.0.0.1;
    

    (Probabilmente scoprirai che questa riga è già lì e devi solo rimuoverla dal commento.)

  4. L'ultimo è riavviare il servizio

    sudo systemctl restart dnsmasq
    sudo dhclient
    

Infine, dovresti controllare se funziona.

dig whatever.localhost

Nota:

Se vuoi usarlo sul tuo server web, devi semplicemente cambiare il file 127.0.0.0 al tuo indirizzo IP effettivo.

Ho dovuto fare esattamente la stessa cosa per uno dei miei siti.È possibile seguire i seguenti passaggi

  1. Se hai cPanel sul tuo server, crea un sottodominio *, in caso contrario, dovresti impostare un record A nel tuo DNS (per BIND vedi http://ma.tt/2003/10/wildcard-dns-and-sub-domains/).Sul tuo dev.server, faresti molto meglio a falsificare i sottodomini aggiungendoli al tuo hosts file.

  2. (Se hai utilizzato cPanel non dovrai farlo).Dovrai aggiungere qualcosa di simile al seguente al tuo file vhosts di Apache.Dipende in gran parte dal tipo di server (condiviso o meno) in esecuzione.IL SEGUENTE CODICE NON È COMPLETO.E' SOLO PER DARE UNA DIRETTA.NOTA: ServerAlias example.com *.example.com è importante.

    <VirtualHost 127.0.0.1:80>  
            DocumentRoot /var/www/  
            ServerName example.com  
            ServerAlias example.com *.example.com  
    </VirtualHost>
    
  3. Successivamente, poiché puoi utilizzare lo script PHP per controllare l'intestazione "Host" e scoprire il sottodominio e servire il contenuto di conseguenza.

Innanzitutto, voglio consentire agli utenti di pubblicare pagine e dare a ciascuno un sottodominio di loro scelta (ex:utente.miosito.com).Da quello che posso raccogliere, il modo migliore per farlo è mappare user.mysite.com a mysite.com/user con mod_rewrite e .htaccess - è corretto?

Potrebbe essere meglio usarlo host virtuali.In questo modo, ogni utente può avere una configurazione del server web praticamente indipendente dagli altri.

La sintassi è più o meno questa:

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

Da quello che ho visto su molti host web, configurano un host virtuale su Apache.

Quindi, se il tuo www.miosito.com viene servito da /var/www, potresti creare una cartella per ciascun utente.Quindi mappa l'host virtuale su quella cartella.

Con ciò, funzionano sia mysite.com/user che user.mysite.com.

Per quanto riguarda il tuo ambiente di test, se utilizzi Windows, suggerirei di modificare il tuo file HOSTS per mappare mysite.com sul tuo PC locale (127.0.0.1), così come eventuali sottodomini che hai impostato per il test.

La soluzione che ho trovato per Ubuntu 18.04 è simile a Questo ma implica la configurazione di NetworkManager:

  1. Modifica il file /etc/NetworkManager/NetworkManager.conf, e aggiungi la riga dns=dnsmasq al [main] sezione

    sudo editor /etc/NetworkManager/NetworkManager.conf
    

    dovrebbe assomigliare a questo:

    [main]
    plugins=ifupdown,keyfile
    dns=dnsmasq
    ...
    
  2. Inizia a utilizzare resolv.conf di NetworkManager

    sudo rm /etc/resolv.conf
    sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
    
  3. Crea un file con la configurazione dei caratteri jolly

    echo 'address=/.localhost/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/localhost-wildcard.conf
    
  4. Ricaricare la configurazione di NetworkManager

    sudo systemctl reload NetworkManager
    
  5. Provalo

    dig localdomain.localhost
    

Puoi anche aggiungere qualsiasi altro dominio, molto utile per alcuni tipi di autenticazione quando si utilizza una configurazione di sviluppo locale.

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

Allora funziona:

dig petproject.local-dev.workdomain.com

;; ANSWER SECTION:
petproject.local-dev.workdomain.com. 0 IN   A   127.0.0.1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top