Agregar subdominio a la URL del host local

104

Estoy escribiendo una aplicación web que se comporta de manera diferente según el prefijo de la URL. El formato es algo como:

   https://myprefix.mycompany.com

La aplicación web se comporta de manera diferente según myprefix. Mi aplicación web extrae esa parte de la URL y actúa en consecuencia.

Sin embargo, cuando pruebo en mi local, uso una dirección de localhost:

   https://localhost:1234

No debería hacer algo como:

   https://myprefix.localhost:1234

¿Cuál es la mejor manera de probar este escenario?

Muchas gracias

Kevin
fuente
Aquí está la solución a este problema stackoverflow.com/a/29629675/2950006
Mickel Chowdhury

Respuestas:

149

Desafortunadamente, debido a localhostque no es un dominio adecuado, no puede agregarle un subdominio de esa manera. Usted puede , sin embargo, engañar a su equipo en el pensamiento de que posee un dominio específico y probar cosas de esa manera. Por ejemplo, si tiene un sistema operativo basado en UNIX, abra (como raíz) el archivo /etc/hostsy agregue una línea (o líneas) como esta:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

Ahora el ordenador tratar tanto example.comy subdomain.example.comcomo perteneciente a sí mismo. Si visita cualquiera de los dos en su navegador web, en principio funcionarán igual localhost, pero su servidor web verá el dominio correcto en su encabezado de Host.

Matt Patenaude
fuente
Muchas gracias por tu respuesta. Eso es exactamente lo que quiero. Sin embargo, mi aplicación web se ejecuta en un puerto, digamos 1234. Busqué y la gente dijo que no hay forma de especificar un número de puerto en / etc / hosts. ¿Cuál es la mejor forma de especificar el puerto?
Kevin
7
Vas a tener que sólo tiene que utilizar el puerto en su URL, como de costumbre, por ejemplo, http://subdomain.example.com:1234/whatever. El puerto está completamente separado del dominio (los dominios se usan para identificar la máquina, los puertos se usan para identificar con qué programa en la máquina comunicarse).
Matt Patenaude
Alternativamente, si puede ejecutar su software como root (para pruebas), puede usar el puerto 80, que es el predeterminado, por lo que no tendrá que especificar uno.
Matt Patenaude
4
Uno podría simplemente enumerar los nombres de dominio después de la dirección IP: 127.0.0.1 example.com sub.example.com sub2.example.com...
autómata
6
Esto también funciona para Windows. El archivo de host en las ventanas se encuentra en: C:\Windows\System32\drivers\etc\hosts. Deberá copiar el archivo en otro lugar que tenga permisos más bajos (como su escritorio), editarlo y luego pegarlo nuevamente en la carpeta (para evitar los permisos).
Lindsay-Needs-Sleep
36

No estoy seguro del mismo comportamiento en Windows. Estoy trabajando en Linux Mint.

Puede utilizarlo lvh.me:portcomo dominio local. Puede imaginar que su proyecto se implementa enlocalhost:port en este dominio.

En lugar de sub.localhost:porttener que usarsub.lvh.me:port

UPD

sub.localhost:porttrabaja en chrome. Firefox agrega automáticamente www. al comienzo del dominio ingresado que puede causar problemas con las pruebas de subdominios

Vassily
fuente
Puedo confirmar que esto también funciona en Windows. Los navegadores Internet Explorer, Edge, Firefox y Chrome funcionan a la perfección.
Jose A
Estaba usando Firefox y Chrome Tip me salvó el día, ¡gracias!
ZekeMidas
2
Para mayor flexibilidad, también puede utilizar los servicios nio.io o xip.io. Permiten mapear cualquier dirección IP a cualquier subdominio. Por ejemplo, sus colegas también podrían usar la misma URL para acceder a su aplicación. Por ejemplo, si la dirección IP de su estación de trabajo es 172.16.0.42, puede utilizarla https://myprefix.myapp.172.16.0.42.nip.io:1234desde su PC o desde otras PC de su intranet.
mh8020
6

Para los usuarios de Windows, según esta respuesta y según este comentario, puede lograr esto agregando puertos a localhost a través del archivo de hosts que reside en esta ruta:

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

Y agregue líneas como las siguientes:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com
Shimmy Weitzhandler
fuente
1

Solución de una línea para Windows

Abra PowerShell como administrador y ejecute el siguiente comando, reemplazando sub.mydomain.comcon lo que desee.

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

Descompostura:

  • `n - nueva línea
  • 127.0.0.1 - dirección de loopback
  • sub.mydomain.com - nombre de dominio
  • | Out-File C:\Windows\System32\drivers\etc\hosts - canalizar la cuerda al hosts
  • -encoding ASCII - codificación correcta
  • -append- agregar al final del archivo (¡importante!)
Richard Dunn
fuente
1

Deberías usar el .testdominio para cosas así. Para eso .testes. localhostno se supone que tenga subdominios.

Hacerlo viola los estándares RFC aprobados. localhosttiene un registro A y en entornos IPv6, un registro AAAA. Todos los demás tipos de registros DNS, incluida SOA, están prohibidos.

Sin un registro SOA, no puede ser un ápice de zona que tenga subregistros, por lo que no se permiten subdominios ni delegaciones. Incluso el reciente borrador de RFC titulado Let localhost sea localhost es consistente con esto.

SR. X
fuente