Windows hosts dosyasındaki joker karakterler


289

Herhangi bir isteğin *.localyeniden yönlendirilmesi için yerel geliştirme makinemi ayarlamak istiyorum localhost. Fikir ben birden fazla siteyi geliştirmek olarak, sadece Apache adı verilen sankonlarına ekleyebilir olmasıdır site1.local, site2.localvb ve onlara tüm kararlılığını sahip localhostApache buna göre farklı bir site sunarken,.

Windows XP kullanıyorum.

Eklemeyi denedim

127.0.0.1       *.local

benim c:\windows\system32\drivers\etc\hostsdosyaya da çalıştı:

127.0.0.1       .local

İkisi de işe yaramıyor.

Onları farklı port numaralarına ayarlayabileceğimi biliyorum, ama bu bir acıdır, çünkü hangi portun hangisi olduğunu hatırlamak zor.

Yerel bir DNS sunucusu veya zor bir şey kurmak istemiyorum, herhangi bir öneriniz var mı?


1
Lütfen anysubdomain.reconn.co.uk adresini her zaman localhost'unuzu gösterecek (çevrimiçi iseniz) bir çözüm olarak kullanmaktan çekinmeyin (aşağıdaki cevabımı inceleyin).
Paul Grimshaw

Apache vhosts ServerName'i ayrıştıran ve hosts dosyasını güncelleyen bir komut dosyası ne olacak?
Elvis Ciotti

1
İnanıyorum * .local özel semantiğe sahiptir ve var olmayan bir şeyi kullanmalısınız. Bunun gerçek olduğunu düşünmediğim için * .dev kullanıyorum.
WraithKenny

Yanıtlar:


431

Akrilik DNS Proxy (ücretsiz, açık kaynak) işi yapar. Kendi ana bilgisayar dosyasıyla bir proxy DNS sunucusu (kendi bilgisayarınızda) oluşturur. Hosts dosyası joker karakterleri kabul eder.

Resmi web sitesinden indirin

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

Akrilik DNS Proxy'sini Yapılandırma

Acrylic DNS Proxy'yi yapılandırmak için yukarıdaki bağlantıdan yükleyin ve ardından şu adrese gidin:

  1. Başlat
  2. Programlar
  3. Akrilik DNS Proxy'si
  4. Yapılandırma
  5. Özel Ana Bilgisayarlar Dosyasını Düzenle (AcrylicHosts.txt)

Dosyanın sonuna aşağıdaki satırları ekleyin:

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

Acrylic DNS Proxy hizmetini yeniden başlatın:

  1. Başlat
  2. Programlar
  3. Akrilik DNS Proxy'si
  4. Yapılandırma
  5. Akrilik Hizmetini Yeniden Başlat

Ağ arabirimi ayarlarınızda DNS ayarınızı da yapmanız gerekir:

  1. Başlat
  2. Kontrol Paneli
  3. Ağ ve Internet
  4. Ağ bağlantıları
  5. Yerel Alan Bağlantısı Özellikleri
  6. TCP / IPv4

"Aşağıdaki DNS sunucu adresini kullan" seçeneğini ayarlayın:

Preferred DNS Server: 127.0.0.1

Daha sonra bu yanıtı jeremyasnyder'ın cevabı (kullanarak VirtualDocumentRoot) ile birleştirirseniz , sadece bir dizin oluşturarak etki alanlarını / sanal ana bilgisayarları otomatik olarak ayarlayabilirsiniz.


12
Açık olmak gerekirse, "özel ana makineler dosyası" AcrylicConfiguration.ini değil, AcrylicHosts.txt dosyasıdır. Belki bu açık olmalı, ama bir süredir kafam karıştı.
mhenry1384

@Petah - Bu tam yapılandırma benim için joker alanlarla çalışıyordu, ancak durdu ve nedenini anlayamıyorum. Tüm istekler "Bu sayfa kullanılamıyor" döndürüyor. Acryllic yeniden başlatıldı, tüm önbellekleri sıfırla ... başka ne olabileceğini düşünüyorsun?
SB2055

1
@ SB2055 ağ özelliklerinizdeki DNS ayarlarınızın hala doğru olup olmadığını kontrol edin.
Petah

Akrilik'in ağ ortamınızın sık sık değiştiği durumlar için uygun olmadığı unutulmamalıdır. Google'ın genel DNS sunucusu ağınızdaki gerçek makine adlarını çözmeyecektir ... ve bunu bir ağ için düzeltebilirsiniz, ancak başka bir ağa gittiğinizde dahili makine adlarını çözemezsiniz. Bu özellikle acı verici olabilir. Ancak, Akrilik hakkında bilinmesi gereken her şeyi bilmediğimi de belirtmeliyim.
Alex Dresko

Bu bir VM içinde yapılıyorsa PrimaryServerAddress, yapılandırmadaki (anasistemler dosyası değil), ana bilgisayar tarafından sağlanan yapılandırmaya değiştirilmelidir 8.8.8.8. VirtualBox'ta bu 10.0.2.3.
mightyiam

80

Sorunuzu yanıtlamak için Windows altındaki hosts dosyasında joker karakterler kullanamazsınız.

Ancak, hosts dosyasını yalnızca yeni sitelerin çalışması için değiştirmek istiyorsanız .... Apache'nizi şu şekilde yapılandırabilirsiniz ve yapılandırmasını düzenlemeye devam etmeniz gerekmez:

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

Temel olarak kurulumuma dayalı hızlı bir özet, apache.conf dosyanıza aşağıdakileri ekleyin:

 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>

Bu bana şöyle bir giriş eklememe izin verir:

127.0.0.1       test.dev

ve sonra dizini yapın, c: \ xampp \ sites \ dev \ test ve gerekli dosyaları oraya yerleştirin ve sadece çalışır.

Diğer seçenek <Directory>apache.conf dosyasındaki etiketleri kullanmak ve http: // localhost / project / dizinindeki sayfalara başvurmaktır .


OSX'te joker karakterler kullanabilir misiniz?
cjm2671

Evet Bind kullanarak - clintberry.com/2011/…
Ryan Schumacher

30

Bunun mümkün olduğunu düşünmüyorum.

Yine de, her yeni site ve konum eklediğinizde apache sanal kök girişlerini değiştirmeniz gerekir, bu nedenle yeni adı Windows vhost dosyasına senkronize etmek büyük bir iş değildir.

Güncelleme: lütfen bir sonraki cevabı ve bu cevaptaki yorumları kontrol edin. Bu cevap 6 yaşında ve artık doğru değil.


3
Ancak Nginx kullanırken, yeni bir ikinci düzey etki alanı grubu * .localhost eklemek için Nginx yapılandırma dosyasını değiştirmek gerekli değildir. Yani, hosts dosyasının eksi.
sergzach

8
Sadece çok dilli bir web siteniz olduğunda, ServerAlias *.mydomain.localhost( *dil kodu olarak) ile bir <VirtualHost> 'a sahip olabileceğinizi belirtmek için, her yeni dil eklediğinizde httpd.conf dosyasını düzenlemeniz gerekmez; ancak yine de ana alan adına alt alan adını eklemeniz gerekir, dolayısıyla yukarıdaki sorunun alaka düzeyi budur.
Benjamin

10
Dinamik Sanal Ana Bilgisayarlar buradaki anahtar sözcüktür ve çoğu sunucu tarafından desteklenir, yani Apache ve Nginx. Yani hayır, her proje oluşturduğunuzda kesinlikle Apache-config'inize dokunmanız gerekmiyor.
Valentin Klinghammer

2
Biz de joker sanal sunucuları olabilir, sadece hostsdosyaya düştü
ericn

6

Zaten burada harika önerilere eklemek için, XIP.IO halka açık harika bir joker DNS sunucusudur.

      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

(Geridöngü olmayan adresleri belirleme özelliği, bir anasistemler dosyasına erişemediğiniz iOS cihazlarındaki siteleri test etmek için harikadır.)

Bunu diğer yanıtlarda belirtilen bazı Apache yapılandırmasıyla birleştirirseniz, VirtualHost'ları sıfır kurulumla potansiyel olarak ekleyebilirsiniz .


LAN'ınızda bir IP olması durumunda ekip üyeleriniz için de çalışır. Aynı anasistemler dosyasıyla yerel bir DNS sunucusu yüklemeleri gerekmez.
Tobias Uhmann

4

Windows Hosts Dosyasını Kullanma hakkında "Ayrıca joker karakterlere izin verilmiyor" yazan bir ileti buldum .

Geçmişte, daha önce ana bilgisayarlar dosyasına ek girişler ekledim, çünkü (daha önce de belirtildiği gibi), zaten apache yapılandırma dosyasını düzenlerken fazladan bir iş değil.


Hosts dosyasını ne kadar uzun süre yaparsanız, isteklerin çözülmesi de o kadar uzun sürer. Çok fazla girişiniz varsa iyi bir çözüm değil.
cchamberlain

4

Bilgisayarınızı yeniden başlatmak yerine, windows komut isteminden "ipconfig / flushdns" komutunu çalıştırdığınızda hosts dosyasını düzenlemek daha az sorun yaratır.


1
tarayıcı dns önbelleğini değil, pencereleri temizler. Bu yüzden tarayıcının dns önbelleğe alması için 20-30 dakika beklemesi gerekiyor.
Jacob Melvad Jensen

3

Ağ yöneticinizle sizin için bir alan adı oluşturma ('evilpuppetmaster.hell' deyin) ve orada joker karakter bulunması için her şeyin (* .evilpuppetmaster.hell ') IP'nize çözümlenmesini sağlayabilirsiniz.


1
Teşekkürler, ancak bu bir ev devserver'da, kullanılabilir DNS veya ağ yöneticisi yok.
EvilPuppetMaster

Tamam, belki bir alana erişiminiz var veya bunu yapan birini tanıyor musunuz? Örn: * .evilpuppetmatser.arealdomain.com
Stu Thompson

Pek sayılmaz. Yine de, bu bir ev makinesidir, bu yüzden yönlendiricim internete her bağlandığında yeni bir IP alır. Harici bir DNS sunucusu yardımcı olmaz.
EvilPuppetMaster

1
1) Hiçbir neden yok * .evilpuppetmatser.arealdomain.com 127.0.0.1, 2'ye çözümleyemiyor.) Harici bir DNS sunucusu önermiyorum. Gerçek bir etki alanında bir alt etki alanı kullanmanızı öneririm. Teknik olarak, herkes server.evp.arealdomain.com'u çözebilir.
Stu Thompson

3
* .127.0.0.1.xip.io ve diğerleri
Dave James Miller

3

Biz yerel DNS sunucusu joker DNS kullanarak bu çalışma var: Bir ekleme Agibi rekor bir şey*.local -> 127.0.0.1

Ağ ayarlarınızın ağdaki makineler için alan adı soneki arama listesinde seçilen alan sonekine sahip olması gerektiğini düşünüyorum, bu nedenle .localşirketinizin dahili alanıyla (örneğin .int) değiştirmek ve daha sonra .localhost.intbunu netleştirmek için bir alt alan adı eklemek isteyebilirsiniz ne için.

Yani ağdaki herkes için *.localhost.intçözecekti 127.0.0.1ve tüm geliştiriciler için yapılandırma dosya ayarları "sadece işe yarayacak" eğer uç noktaları o alt etki alanı asmak örneğin site1.localhost.int, site2.localhost.intBu hemen hemen tanıttığımız şemadır.

dnsmasq da güzel görünüyor, ama henüz denemedim: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/




2

Bunu yapmak için DNSChef kullanıyorum.

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

Uygulamayı indirmelisiniz, Linux veya Mac'te çalıştırmak için python'a ihtiyacınız var. Windows'un kendi exe'si var.

Örneğin, dns girişlerinizle bir ini dosyası oluşturmanız gerekir

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

Sonra dns uygulamasını yönetici ayrıcalıklarıyla başlatmalısınız.

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

veya pencerelerde

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

Son olarak, yerel DNS ortamınızı (ağ, arayüz, dns veya benzeri veya linux /etc/resolv.conf) tek DNS olarak ayarlamanız gerekir.

Bu kadar


2

Bu basit aracı ana bilgisayarların yerini almak için yaptı. Düzenli ifadeler desteklenir. https://github.com/stackia/DNSAgent

Örnek bir yapılandırma:

[
    {
        "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"
    }
]

0

Yazma yasağı bulamadım, ancak kural olarak, Windows hosts dosyası UNIX hosts dosyasını yakından takip ediyor ve bu dosyaya joker ana bilgisayar adı başvuruları koyamazsınız.

Adam sayfasını okursanız şöyle der:

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

Söylese de,

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

bu pratik düzeyde doğru değildir.

Temel olarak, / etc / hosts dosyasına bakan kod joker karakter girişini desteklemez.

Çözüm, tüm girişleri önceden oluşturmaktır, belki bir kerede birkaç yüz giriş koymak için bir komut dosyası kullanın.


0

@petah ve Acrylic DNS Proxy en iyi cevaptır ve sonunda @jeremyasnyder'in biraz daha aşağıda açıkladığı bir Apache kullanarak çoklu site yapma yeteneğine başvuruyor ...

... ancak, bizim durumumuzda çok kiracılı bir barındırma sistemini test ediyoruz ve bu nedenle test etmek istediğimiz çoğu alan aynı şekilde virtualhostgiderken, birkaçı başka bir yere yönlendiriliyor.

Yani bizim durumumuzda, ServerAliasdirektifte regex joker karakterlerini kullanıyorsunuz ...

ServerAlias *.foo.local

0

İşte hedefi gerçekleştirmek isteyenler için toplam yapılandırma (geliştirici ortamında joker karakterler, yani XAMPP - bu örnek aynı kod tabanına işaret eden tüm siteleri varsayar)

hosts dosyası (giriş ekle)

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

127.0.0.1   example.local

httpd.conf yapılandırması (vhost'ları etkinleştir)

dosya: \ XAMPP \ etc \ httpd.conf

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

httpd-vhosts.conf yapılandırması

dosya: XAMPP \ etc \ extra \ httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin admin@example.local
    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'yi yeniden başlat

pac dosyası yarat:

İstediğiniz yere whatever.pac olarak kaydedin ve dosyayı tarayıcının ağına> proxy> auto_configuration ayarlarına yükleyin (bunu değiştirirseniz yeniden yükleyin)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

Çalışmadı, henüz PAC hakkında bilmiyorum ama bu satır 'dönüş "PROXY example.local";' tarayıcı tarafından proxy olarak kullanılacak bir proxy ip: port döndürmez misiniz?
ion

0

Bunun için echoipdns kullanabilirsiniz ( https://github.com/zapty/echoipdns ).

echoipdns local .Local alt etki alanlarına ilişkin tüm istekleri çalıştırarak 127.0.0.1'e yönlendirilir, bu nedenle xyz.local vb. Alanlara sahip 127.0.0.1'e çözümlenir. Başka bir sonek de kullanabilirsiniz.

Echoipdns daha da güçlüdür, url'nizi ağdaki diğer makinelerden kullanmak istediğinizde yine de sıfır yapılandırma ile kullanabilirsiniz.

Örneğin, makinenizin ip adresi 192.168.1.100 ise, artık her zaman 192.168.1.100 olarak çözümlenecek olan xyz.192-168-1-100.local alan adını kullanabilirsiniz. Bu sihir, etki alanı adının ikinci bölümündeki ip adresine bakarak ve DNS sorgusunda aynı ip adresini döndürerek echoipdns tarafından yapılır. Uzak sisteme erişmek istediğiniz makinede yankıları çalıştırmanız gerekecektir.

echoipdns ayrıca bağımsız bir DNS proxy olarak da kurulabilir, bu nedenle bu DNS'yi işaret ederek, artık her zaman özel bir komut çalıştırmadan yukarıdaki avantajların tümünü kullanabilirsiniz ve hatta mobil cihazlardan da kullanabilirsiniz.

Dolayısıyla bu, yerel ve ekip ortamı için joker alan tabanlı DNS geliştirmeyi basitleştirir.

echoipdns Mac, Linux ve Windows üzerinde çalışır.

NOT: Ben yankılar için yazarım.


0

Acrylic DNS Proxy ile nginx config otomatik alt etki alanı için yapılandırma

nginx sites klasörünüz için auto.conf dosyası

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;
    }
}

Acrylic hosts dosyasına ekleyin 127.0.0.1 example.com *.example.comve Acrylic hizmetini yeniden başlatın. $ branch - alt alan adınız.

Root / var / www / html / $ branch / public yerine ayarlayın ; proje yolunuz


0

Bu Pi-Hole kullanılarak yapılabilir , sadece "/ etc / hosts" düzenleyin ve dns servisini yeniden başlatın.

nano /etc/hosts
pihole restartdns

Misal:

127.0.1.1       raspberrypi
192.168.1.1     w1.dev.net
192.168.1.2     w2.dev.net
192.168.1.3     w3.dev.net

-1

Http://www.no-ip.com gibi dinamik bir DNS istemcisi kullanabilirsiniz . Ardından, etki alanım.no-ip.com'a CNAME * .alanadim.com harici bir DNS sunucusuyla.


2
harici ip'inize çözümlenir ve genellikle yönlendiricinizi / modemler yapılandırma sayfanızı getirir
Sam

-1

Böyle bir joker karakter ekleyemeseniz de, en azından test etmek için, benim için yeterince iyi çalışan, ihtiyacınız olan sitelerin tam listesini ana bilgisayarlar dosyanıza ekleyebilirsiniz:

127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...


Bence orijinal poster bu adımın zorluğundan kaçınmaya çalışıyor.
Simon East
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.