Добавить субдомен в URL-адрес localhost


104

Я пишу веб-приложение, которое ведет себя по-разному в зависимости от префикса URL-адреса. Формат примерно такой:

   https://myprefix.mycompany.com

Веб-приложение ведет себя по-разному в зависимости от myprefix. Мое веб-приложение извлекает эту часть из URL-адреса и действует в соответствии с ней.

Однако, когда я тестирую на своем локальном компьютере, я использую адрес localhost:

   https://localhost:1234

Я не советовал делать что-то вроде:

   https://myprefix.localhost:1234

Как мне лучше всего протестировать этот сценарий?

Большое спасибо


Вот решение этой проблемы stackoverflow.com/a/29629675/2950006
Микель Чоудхури,

Ответы:


149

К сожалению, поскольку localhostэто неподходящий домен, вы не можете добавить к нему подобный субдомен. Однако вы можете обмануть свой компьютер, заставив его думать, что он владеет определенным доменом, и таким образом все протестировать. Например, если у вас операционная система на основе UNIX, откройте (как root) файл /etc/hostsи добавьте строку (или строки) вроде этой:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

Ваш компьютер теперь будет рассматривать оба example.comи subdomain.example.comкак принадлежащие себе. Если вы посетите любой из них в своем веб-браузере, они в принципе будут работать так же, как localhost, но ваш веб-сервер увидит правильный домен в своем заголовке Host.


Большое спасибо за ваш ответ. Это именно то, что я хочу. Однако мое веб-приложение работает на порту, скажем, 1234. Я поискал, и люди сказали, что нет возможности указать номер порта в / etc / hosts. Как лучше всего указать порт?
Кевин

7
Вам нужно будет просто использовать порт в своем URL-адресе, как обычно, например http://subdomain.example.com:1234/whatever. Порт полностью отделен от домена (домены используются для идентификации машины, порты используются для определения, с какой программой на машине взаимодействовать).
Мэтт Патенауд

В качестве альтернативы, если вы можете запускать свое программное обеспечение от имени пользователя root (для тестирования), вы можете просто использовать порт 80, который используется по умолчанию, поэтому вам не придется его указывать.
Мэтт Патенауд

4
Можно просто перечислить доменные имена после IP-адреса: 127.0.0.1 example.com sub.example.com sub2.example.com...
automaton

6
Это также работает для окон. Хост - файл на окнах находится по адресу: C:\Windows\System32\drivers\etc\hosts. Вам нужно будет скопировать файл в другое место с более низкими разрешениями (например, на рабочий стол), чтобы отредактировать его, а затем вставить обратно в папку (чтобы обойти разрешения).
Lindsay-Needs-Sleep

36

Я не уверен в таком же поведении в окнах. Я работаю над linux mint.

Можно использовать lvh.me:portкак локальный домен. Вы можете представить, что ваш проект развернут localhost:portв этом домене.

Вместо того sub.localhost:port, чтобы использоватьsub.lvh.me:port

UPD

sub.localhost:portна хроме работает. Firefox автоматически добавляет www. в начале введенного домена, что может вызвать проблемы с тестированием поддоменов


Я могу подтвердить, что это работает и в Windows. Браузеры Internet Explorer, Edge, Firefox и Chrome работают безупречно!
Jose A

Я использовал firefox, и хром спас мне день, спасибо!
ZekeMidas

2
Для дополнительной гибкости вы также можете использовать сервисы nio.io или xip.io. Они позволяют сопоставить любой IP-адрес с любым поддоменом. Так, например, ваши коллеги также могут использовать тот же URL-адрес для доступа к вашему приложению. Например, если IP-адрес вашей рабочей станции 172.16.0.42, вы можете использовать его https://myprefix.myapp.172.16.0.42.nip.io:1234со своего ПК или с других ПК в вашей интрасети.
mh8020 09

6

Для пользователей Windows, основываясь на этом ответе и в этом комментарии, вы можете добиться этого, добавив порты в localhost через файл hosts, который находится по этому пути:

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

И добавьте к нему следующие строки:

127.0.0.1    example.com
127.0.0.1    subdomain.example.com

1

Однострочное решение для Windows

Откройте PowerShell от имени администратора и выполните следующую команду, заменив sub.mydomain.comвсе, что хотите.

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

Сломать:

  • `n - новая линия
  • 127.0.0.1 - адрес обратной связи
  • sub.mydomain.com - доменное имя
  • | Out-File C:\Windows\System32\drivers\etc\hosts - протяните тетиву к hosts
  • -encoding ASCII - правильная кодировка
  • -append- добавить в конец файла (важно!)

1

Вы должны использовать .testдомен для подобных вещей. Это то .test, для чего. localhostне должно иметь поддоменов.

Это нарушает утвержденные стандарты RFC. localhostимеет запись A, а в средах IPv6 - запись AAAA. Все другие типы записей DNS, включая SOA, запрещены.

Без записи SOA это не может быть вершина зоны, имеющая подзаписи, поэтому ни поддомены, ни делегирование не разрешены. Даже недавний проект RFC под названием Let localhost be localhost согласуется с этим.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.