it-swarm.com.de

Platzhalter in einer Windows-Hostdatei

Ich möchte meinen lokalen Entwicklungscomputer so einrichten, dass alle Anforderungen für *.local an localhost umgeleitet werden. Die Idee ist, dass ich, während ich mehrere Sites entwickle, einfach Apache mit dem Namen site1.local, site2.local etc hinzufügen und sie alle in localhost auflösen lassen, während Apache entsprechend eine andere Site bedient.

Ich bin unter Windows XP.

Ich habe versucht, etwas hinzuzufügen 

127.0.0.1       *.local

zu meiner c:\windows\system32\drivers\etc\hosts-Datei, auch versucht:

127.0.0.1       .local

Keiner von denen scheint zu funktionieren.

Ich weiß, dass ich sie für verschiedene Portnummern einrichten kann, aber das ist ein Schmerz, da es schwer ist, sich zu merken, welcher Port welcher ist.

Ich möchte keinen lokalen DNS-Server einrichten oder etwas hartes, irgendwelche Vorschläge?

269

Acrylic DNS Proxy (kostenlos, Open Source) erledigt die Arbeit. Es erstellt einen Proxy-DNS-Server (auf Ihrem eigenen Computer) mit seiner eigenen Hosts-Datei. Die hosts-Datei akzeptiert Platzhalter.

Download von der offiziellen Website

http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home

Konfigurieren von Acrylic DNS Proxy

Um den Acrylic DNS Proxy zu konfigurieren, installieren Sie ihn über den obigen Link und gehen Sie zu:

  1. Start
  2. Programme
  3. Acryl-DNS-Proxy
  4. Konfig
  5. Benutzerdefinierte Hosts-Datei bearbeiten (AcrylicHosts.txt)

Füge die folgenden Zeilen am Ende der Datei hinzu:

127.0.0.1   *.localhost
127.0.0.1   *.local
127.0.0.1   *.lc

Starten Sie den Acrylic DNS Proxy-Dienst neu:

  1. Start
  2. Programme
  3. Acrilic DNS-Proxy
  4. Konfig
  5. Starten Sie den Acryl-Dienst neu

Sie müssen auch Ihre DNS-Einstellung in den Einstellungen der Netzwerkschnittstelle anpassen:

  1. Start
  2. Schalttafel 
  3. Netzwerk und Internet 
  4. Netzwerkverbindungen 
  5. Eigenschaften der LAN-Verbindung
  6. TCP/IPv4

Set "Folgende DNS-Serveradresse verwenden":

Preferred DNS Server: 127.0.0.1

Wenn Sie diese Antwort dann mit der Antwort von jeremyasnyder kombinieren (mithilfe von VirtualDocumentRoot), können Sie Domänen/virtuelle Hosts automatisch einrichten, indem Sie einfach ein Verzeichnis erstellen.

405
Petah

Um Ihre Frage zu beantworten, können Sie in der hosts-Datei unter Windows keine Platzhalter verwenden.

Wenn Sie jedoch nur die hosts-Datei ändern möchten, damit neue Sites funktionieren, können Sie Ihren Apache so konfigurieren und müssen nicht weiter bearbeiten, sondern die config:

http://postpostmodern.com/instructional/a-smarter-mamp/

Grundsätzlich eine kurze Zusammenfassung basierend auf meinem Setup. Fügen Sie Ihrer Apache.conf-Datei Folgendes hinzu:

 LoadModule vhost_alias_module modules/mod_vhost_alias.so

 NameVirtualHost *:80

  <Directory "/xampp/sites">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all 
  </Directory>

  <VirtualHost *:80>
      VirtualDocumentRoot c:/xampp/sites/%-1/%-2+/
  </VirtualHost>

Dadurch kann ich einen Eintrag hinzufügen wie:

127.0.0.1       test.dev

und dann das Verzeichnis c:\xampp\sites\dev\test erstellen und die erforderlichen Dateien dort ablegen, und es funktioniert einfach.

Die andere Option ist, <Directory>-Tags in Apache.conf zu verwenden und auf die Seiten von http: // localhost/project/ zu verweisen.

79
jeremyasnyder

Ich denke nicht, dass es möglich ist.

Sie müssen die Apache Virtualroot-Einträge trotzdem jedes Mal ändern, wenn Sie eine neue Site und einen neuen Standort hinzufügen. Es ist daher keine große Aufgabe, den neuen Namen in die Windows-vhost-Datei zu synchronisieren.

Update: Bitte überprüfen Sie die nächste Antwort und die Kommentare zu dieser Antwort. Diese Antwort ist 6 Jahre alt und nicht mehr richtig.

29
Biri

Das Bearbeiten der hosts-Datei ist weniger schmerzhaft, wenn Sie "ipconfig/flushdns" über die Windows-Eingabeaufforderung ausführen, anstatt den Computer neu zu starten.

4
Joe

Um die großartigen Vorschläge hier hinzuzufügen, ist XIP.IO ein fantastischer Platzhalter-DNS-Server, der öffentlich verfügbar ist.

      myproject.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
  other.project.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
   other.machine.10.0.0.1.xip.io  -- resolves to -->   10.0.0.1

(Die Möglichkeit, Nicht-Loopback-Adressen anzugeben, ist ideal für das Testen von Sites auf iOS-Geräten, an denen Sie nicht auf eine Hosts-Datei zugreifen können.)

Wenn Sie dies mit einigen der in anderen Antworten erwähnten Apache-Konfigurationen kombinieren, können Sie VirtualHosts möglicherweise mit Nullstellen hinzufügen.

4
Simon East

Ich habe ein Posting zu Using the Windows Hosts File gefunden, das auch sagt "Keine Platzhalter sind erlaubt."

In der Vergangenheit habe ich nur die zusätzlichen Einträge zur hosts-Datei hinzugefügt, da (wie bereits gesagt) keine zusätzliche Arbeit erforderlich ist, wenn Sie bereits die Apache-Konfigurationsdatei bearbeiten.

4
Kevin Hakanson

Wir arbeiten mit einem Wildcard-DNS in unserem lokalen DNS-Server: Fügen Sie einen A-Eintrag hinzu, etwa *.local -> 127.0.0.1

Ich denke, dass Ihre Netzwerkeinstellungen das gewählte Domänensuffix in der Domänensuffix-Suchliste für Computer im Netzwerk enthalten müssen. Daher möchten Sie .local durch die interne Domäne Ihres Unternehmens (z. B. .int) ersetzen und dann eine Subdomain wie .localhost.int hinzufügen machen Sie klar, wofür es ist.

So würde *.localhost.int für jeden im Netzwerk zu 127.0.0.1 aufgelöst werden, und die Konfigurationsdateieinstellungen für alle Entwickler würden "einfach funktionieren", wenn Endpunkte von dieser Subdomäne abhängen, z. site1.localhost.int, site2.localhost.int Dies ist so ziemlich das Schema, das wir eingeführt haben.

dnsmasq sieht auch nett aus, aber ich habe es noch nicht ausprobiert: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

3
Matthew Skelton

Sie könnten Ihren Netzwerkadministrator überreden, eine Domäne für Sie einzurichten (sagen Sie "evilpuppetmaster.hell") und die Wildcard dort zu haben, damit sich alles (* .evilpuppetmaster.hell ') in Ihre IP auflöst

3
Stu Thompson

Ich habe einen einfachen DNS-Proxy in Python geschrieben. Es werden Platzhalter-Einträge in/etc/hosts gelesen. Siehe hier: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

Ich habe unter Linux und Mac OS X getestet, aber noch nicht unter Windows.

2
marlonyao

Ich habe dieses einfache Werkzeug entwickelt, um die Gastgeber zu ersetzen. Reguläre Ausdrücke werden unterstützt . https://github.com/stackia/DNSAgent

Eine Beispielkonfiguration:

[
    {
        "Pattern": "^.*$",
        "NameServer": "8.8.8.8"
    },
    {
        "Pattern": "^(.*\\.googlevideo\\.com)|((.*\\.)?(youtube|ytimg)\\.com)$",
        "Address": "203.66.168.119"
    },
    {
        "Pattern": "^.*\\.cn$",
        "NameServer": "114.114.114.114"
    },
    {
        "Pattern": "baidu.com$",
        "Address": "127.0.0.1"
    }
]
2
Stackia

Möglicherweise versuchen Sie AngryHosts , mit dem Sie Platzhalter und reguläre Ausdrücke unterstützen können. Tatsächlich handelt es sich um eine Software zum Verbessern und Verwalten von Dateien für Hosts.
Weitere Funktionen finden Sie unter @ http://angryhosts.com/features/

2
iloahz

Ich verwende dazu DNSChef.

https://thesprawl.org/projects/dnschef/

Sie müssen die App herunterladen, unter Linux oder Mac benötigen Sie Python, um sie auszuführen. Windows hat ein eigenes Exe.

Sie müssen beispielsweise eine Ini-Datei mit Ihren DNS-Einträgen erstellen 

[A]
*.google.com=192.0.2.1
*.local=127.0.0.1
*.devServer1.com=192.0.2.3

Dann müssen Sie die DNS-Anwendung mit Administratorrechten starten

Sudo python dnschef.py --file myfile.ini -q

oder in Fenstern

runas dnschef.exe --file myfile.ini -q

Schließlich müssen Sie als einzige DNS-Umgebung Ihre lokale Host-Umgebung (Netzwerk, Schnittstelle, DNS oder ähnliches oder in Linux /etc/resolv.conf) einrichten.

Das ist es

2
casivaagustin

@petah und Acrylic DNS Proxy ist die beste Antwort, und am Ende verweist er auf die Möglichkeit, mehrere Sites mit einem Apache zu erstellen, den @jeremyasnyder etwas weiter unten beschreibt ...

In unserem Fall testen wir jedoch ein Multi-Tenant-Hosting-System, und so die meisten Domains, die wir testen möchten, gehen Sie zu derselben virtualhost, während ein paar andere an einen anderen Ort geleitet werden.

In unserem Fall verwenden Sie also einfach Regex-Platzhalter in der ServerAlias-Direktive, wie so ...

ServerAlias *.foo.local
0
oucil

Ich konnte kein schriftliches Verbot finden, aber die Windows-Hosts-Datei folgt der UNIX-Hosts-Datei, und Sie können keine Platzhalter-Hostnamen-Referenzen in diese Datei einfügen.

Wenn Sie die Manpage lesen, heißt es:

DESCRIPTION
     The hosts file contains information regarding the known hosts on the net-
     work.  For each Host a single line should be present with the following
     information:

           Internet address
           Official Host name
           Aliases

Obwohl es sagt,

     Host names may contain any printable character other than a field delim-
     iter, newline, or comment character.

das ist aus praktischer ebene nicht wahr.

Grundsätzlich unterstützt der Code, der die Datei/etc/hosts betrachtet, keinen Platzhaltereintrag.

Die Problemumgehung besteht darin, alle Einträge im Voraus zu erstellen. Verwenden Sie ein Skript, um mehrere hundert Einträge auf einmal zu platzieren.

0
benc

Konfiguration für die automatische Subdomäne von nginx config mit Acrylic DNS Proxy

auto.conf -Datei für Ihren Nginx-Sites-Ordner

server {
    listen 80;
    server_name ~^(?<branch>.*)\.example\.com;
    root /var/www/html/$branch/public;  

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/$branch.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_pass php-fpm:9000;
       fastcgi_index index.php;
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Fügen Sie zur Acrylic-Hosts-Datei 127.0.0.1 example.com *.example.com hinzu und starten Sie den Acrylic-Dienst . $ branch - Ihren Subdomainnamen neu.

Statt root/var/www/html/$ branch/public setzen; Ihren Projektpfad

0
Davron Achilov

Hier ist die Gesamtkonfiguration für alle, die versuchen, das Ziel zu erreichen (Platzhalter in der dev-Umgebung, z. B. XAMPP - in diesem Beispiel werden alle Websites verwendet, die auf dieselbe Codebase zeigen)

hosts-Datei (Eintrag hinzufügen)

datei:% SystemRoot%\system32\drivers\etc\hosts

127.0.0.1   example.local

httpd.conf Konfiguration (vhosts aktivieren)

datei:\XAMPP\etc\httpd.conf

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

httpd-vhosts.conf Konfiguration

datei: 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>

apache neu starten

pac-Datei erstellen:

speichern Sie die Datei „which.pac“, wo immer Sie möchten, und laden Sie die Datei anschließend in das Netzwerk des Browsers> Proxy> Auto_Configuration-Einstellungen.

function FindProxyForURL(url, Host) {
  if (shExpMatch(Host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
0
Daniel Jordi

Sie können echoipdns dafür verwenden ( https://github.com/zapty/echoipdns ). 

Durch Ausführen von echoipdns local werden alle Anforderungen für .local-Unterdomänen zu 127.0.0.1 umgeleitet, sodass sich jede Domäne mit xyz.local usw. in 127.0.0.1 auflöst. Sie können jedes andere Suffix auch verwenden, indem Sie local einfach mit dem gewünschten Namen ersetzen.

Echoipdns ist noch leistungsfähiger. Wenn Sie Ihre URL von anderen Computern im Netzwerk verwenden möchten, können Sie sie auch ohne Konfiguration verwenden. 

Für z. Wenn die IP-Adresse Ihres Computers 192.168.1.100 ist, können Sie jetzt den Domänennamen xyz.192-168-1-100.local verwenden, der immer in 192.168.1.100 aufgelöst wird. Dies geschieht durch die Echoipdns, indem die IP-Adresse im zweiten Teil des Domainnamens betrachtet und dieselbe DNS-Adresse zurückgegeben wird. Sie müssen die Echoipdns auf dem Computer ausführen, von dem aus Sie auf das Remote-System zugreifen möchten.

echoipdns kann auch als eigenständiger DNS-Proxy eingerichtet werden. Wenn Sie also nur auf diesen DNS-Server verweisen, können Sie jetzt alle oben genannten Vorteile nutzen, ohne jedes Mal einen speziellen Befehl ausführen zu müssen, und Sie können ihn sogar von mobilen Geräten verwenden.

Dies vereinfacht also im Wesentlichen die auf Wildcards basierende DNS-Entwicklung für die lokale Umgebung sowie die Teamumgebung.

echoipdns funktioniert auf Mac, Linux und Windows.

HINWEIS: Ich bin Autor für Echoipdns.

0
arva