Jak umieścić wpis z symbolem wieloznacznym w / etc / hosts?

85

Niedawno chciałem wskazać wszystkie subdomeny dla domeny testowej, powiedzmy example.com, do lokalnego hosta. Czy istnieje sposób na skierowanie wszystkich żądań na * .example.com do rozwiązania 127.0.0.1?

aamir
źródło

Odpowiedzi:

103

Zdarza się, że /etc/hostsplik nie obsługuje wpisów z symbolami wieloznacznymi.

Będziesz musiał skorzystać z innych usług, takich jak dnsmasq. Aby włączyć to w dnsmasq, po prostu edytuj dnsmasq.confi dodaj następujący wiersz:

address=/example.com/127.0.0.1
aamir
źródło
5
do wpisywania symboli wieloznacznych - adres = /. example.com/127.0.0.1
vivex
2
@Vivek Nie jest to wymagane
Rahil Wazir
4
W przypadku dnsmasqkonfiguracji Ubuntu zobacz ten .
lemonsqueeze
5
W przypadku konfiguracji macosx passcuriosity.com/2013/dnsmasq-dev-osx jest bardzo pomocne.
aamir
4
rahilwazir, właściwie jest tak, jeśli nie chcesz wszystkich subdomen. # działa również jako symbol wieloznaczny. Osobiście używam `address = / dev # .example.com / 127.0.0.1, aby uruchomić dev123.example.com itp.
Ray Foss
8

Oto konfiguracja dla tych, którzy próbują osiągnąć pierwotny cel (wszystkie symbole wieloznaczne wskazują na tę samą bazę kodu - nic nie instaluj, środowisko programistyczne, tj. XAMPP)

plik hosts (dodaj wpis)

plik: / etc / hosts (inne niż Windows)

127.0.0.1   example.local

konfiguracja httpd.conf (włącz vhosty)

plik: /XAMPP/etc/httpd.conf

# Virtual hosts
Include etc/extra/httpd-vhosts.conf

Konfiguracja httpd-vhosts.conf

plik: XAMPP / etc / extra / httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/path_to_XAMPP/htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs/example.local-error_log"
#    CustomLog "logs/example.local-access_log" common
</VirtualHost>

zrestartuj apache

utwórz plik pac:

zapisz jako cokolwiek.pac, gdziekolwiek chcesz, a następnie załaduj plik w sieci przeglądarki> proxy> ustawienia automatycznej konfiguracji (załaduj ponownie, jeśli to zmienisz)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
Daniel Jordi
źródło
Nie działa dla plików hostów w systemie Windows. Akceptuje tylko www.example.com
Andre Figueiredo
1
działa to w systemie Windows używającym pliku pac w przeglądarce Firefox. Przetestowałem to na wielu komputerach z systemem Windows. plik hosts wymaga tylko jednego wpisu, plik pac obsługuje subdomeny.
Daniel Jordi,
1
Oryginalne pytanie, jak rozumiem, nie dotyczy w ogóle apache, ale na poziomie sieci, więc myślę, że twoja odpowiedź mija się z celem: /
enTropy
do korzystania z pliku pac w internecie, patrz: campus.barracuda.com/product/websecurityservice/article/WSS/ ...
saeed arab sheybani
1
Zwróć uwagę, że używając pliku pac do wysyłania żądań proxy do hosta (np. Localhost), serwer WWW, taki jak Apache, użyje pełnego adresu URL (łącznie z protokołem i nazwą hosta) w zmiennej REQUEST_URI zamiast tylko składnika ścieżki.
JSchirrmacher
5

użyj dnsmasq

udając, że używasz systemu dist opartego na Debianie (ubuntu, mint ..), sprawdź, czy jest zainstalowany z

(sudo) systemctl status dnsmasq

Jeśli jest po prostu wyłączony, zacznij od

(sudo) systemctl start dnsmasq

Jeśli musisz go zainstalować, napisz

(sudo) apt-get install dnsmasq

Aby zdefiniować domeny, aby rozwiązać /etc/dnsmasq.conftaką edycję

address=/example.com/127.0.0.1

aby rozwiązać * .example.com

! Musisz przeładować dnsmasq, aby zmiany zaczęły obowiązywać!

systemctl reload dnsmasq
Immanuel
źródło