Aggiungi un sottodominio all'URL dell'host locale


97

Sto scrivendo un'applicazione web che si comporta in modo diverso a seconda di un prefisso URL. Il formato è qualcosa del tipo:

   https://myprefix.mycompany.com

L'app Web si comporta in modo diverso in base a myprefix. La mia app web estrae quella parte dall'URL e agisce su quella.

Tuttavia, quando eseguo il test sul mio locale, utilizzo un indirizzo localhost:

   https://localhost:1234

Non vorrei fare qualcosa del tipo:

   https://myprefix.localhost:1234

Qual è il modo migliore per testare questo scenario?

Grazie molto


Ecco la soluzione di questo problema stackoverflow.com/a/29629675/2950006
Mickel Chowdhury

Risposte:


139

Sfortunatamente, poiché localhostnon è un dominio corretto, non puoi aggiungere un sottodominio in questo modo. È possibile , però, ingannare il computer a pensare che possiede un dominio specifico e le cose di prova in quel modo. Ad esempio, se hai un sistema operativo basato su UNIX, apri (come root) il file /etc/hostse aggiungi una o più righe come questa:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

Il computer ora tratterà entrambi example.come subdomain.example.comcome appartenenti a se stesso. Se li visiti nel tuo browser web, funzioneranno allo stesso modo, in linea di principio, come localhost, ma il tuo server web vedrà il dominio corretto nella sua intestazione Host.


Grazie mille per la tua risposta. Questo è esattamente quello che voglio. Tuttavia, la mia app web funziona su una porta, diciamo 1234. Ho cercato in giro e la gente diceva che non c'era modo di specificare un numero di porta in / etc / hosts. Qual è il modo migliore per specificare la porta?
Kevin,

7
Dovrai semplicemente usare la porta nel tuo URL come al solito, ad es http://subdomain.example.com:1234/whatever. La porta è completamente separata dal dominio (i domini vengono utilizzati per identificare la macchina, le porte vengono utilizzate per identificare con quale programma sulla macchina comunicare).
Matt Patenaude

In alternativa, se puoi eseguire il software come root (per il test), puoi semplicemente usare la porta 80, che è l'impostazione predefinita, quindi non dovrai specificarne una.
Matt Patenaude

4
Si potrebbe semplicemente elencare i nomi di dominio dopo l'indirizzo IP: 127.0.0.1 example.com sub.example.com sub2.example.com...
automa

5
Funziona anche per Windows. Il file host di Windows si trova all'indirizzo: C:\Windows\System32\drivers\etc\hosts. Dovrai copiare il file da qualche altra parte con autorizzazioni inferiori, (come il tuo desktop), per modificarlo e quindi incollarlo di nuovo nella cartella (per aggirare le autorizzazioni).
Lindsay-Needs-Sleep

33

Non sono sicuro dello stesso comportamento su Windows. Sto lavorando su Linux Mint.

Puoi usare lvh.me:portcome dominio locale. Puoi immaginare che il tuo progetto sia distribuito localhost:portsu questo dominio.

Invece di sub.localhost:portusaresub.lvh.me:port

UPD

sub.localhost:portlavora in Chrome. Firefox aggiunge automaticamente www. all'inizio del dominio inserito che può causare problemi con il test dei sottodomini


Posso confermare che funziona anche su Windows. I browser Internet Explorer, Edge, Firefox e Chrome funzionano perfettamente!
Jose A

Stavo usando Firefox e Chrome Tip mi ha salvato la giornata, grazie!
ZekeMidas

2
Per una maggiore flessibilità, puoi anche utilizzare i servizi nio.io o xip.io. Consentono di mappare qualsiasi indirizzo IP su qualsiasi sottodominio. Quindi, ad esempio, i tuoi colleghi potrebbero anche utilizzare lo stesso URL per accedere alla tua app. Ad esempio, se l'indirizzo IP della tua workstation è 172.16.0.42, puoi usarlo https://myprefix.myapp.172.16.0.42.nip.io:1234dal tuo PC o da altri PC nella tua intranet.
mh8020

5

Per gli utenti Windows, in base a questa risposta e a questo commento, è possibile ottenere ciò aggiungendo porte a localhost tramite il file hosts che risiede in questo percorso:

C:\Windows\System32\drivers\etc\hosts

E aggiungi righe come le seguenti:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

1

Soluzione su una riga per Windows

Apri PowerShell come amministratore ed esegui il seguente comando, sostituendolo sub.mydomain.comcon quello che desideri.

"`n127.0.0.1    sub.mydomain.com" | Out-File C:\Windows\System32\drivers\etc\hosts -encoding ASCII -append

Abbattersi:

  • `n - nuova linea
  • 127.0.0.1 - indirizzo di loopback
  • sub.mydomain.com - nome del dominio
  • | Out-File C:\Windows\System32\drivers\etc\hosts - pipe la stringa al hosts
  • -encoding ASCII - codifica corretta
  • -append- aggiungi alla fine del file (importante!)

1

Dovresti usare il .testdominio per cose del genere. Questo è ciò che .testserve. localhostnon dovrebbe avere alcun sottodominio.

Fare ciò viola gli standard RFC approvati. localhostha un record A e in ambienti IPv6 un record AAAA. Tutti gli altri tipi di record DNS, incluso SOA, sono vietati.

Senza un record SOA, non può essere un apice di zona con sotto-record, quindi non sono consentiti sottodomini né deleghe. Anche la recente bozza RFC intitolata Let localhost be localhost è coerente con questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.