Wildcard dalam file host Windows


289

Saya ingin mengatur mesin pengembangan lokal saya sehingga permintaan untuk *.localdialihkan ke localhost. Idenya adalah bahwa ketika saya mengembangkan beberapa situs, saya bisa menambahkan vhosts ke Apache yang disebut site1.local, site2.localdll, dan minta mereka semua mengatasinya localhost, sementara Apache melayani situs yang berbeda.

Saya menggunakan Windows XP.

Saya mencoba menambahkan

127.0.0.1       *.local

ke c:\windows\system32\drivers\etc\hostsfile saya , juga mencoba:

127.0.0.1       .local

Sepertinya tidak ada yang berhasil.

Saya tahu saya dapat mengaturnya pada nomor port yang berbeda, tapi itu menyusahkan karena sulit untuk mengingat port mana yang mana.

Saya tidak ingin harus menyiapkan server DNS lokal atau sesuatu yang sulit, ada saran?


1
Silakan menggunakan anysubdomain.reconn.co.uk sebagai solusi (jika Anda sedang online), yang akan selalu mengarah ke hosting lokal Anda (lihat jawaban saya di bawah).
Paul Grimshaw

bagaimana dengan skrip yang mem-parsing vhost apache ServerName dan memperbarui file host?
Elvis Ciotti

1
Saya percaya *. Lokal memiliki semantik khusus, dan Anda harus menggunakan sesuatu yang tidak ada. Saya menggunakan * .dev karena saya pikir itu tidak nyata.
WraithKenny

Jawaban:


431

Proxy DNS Akrilik (gratis, sumber terbuka) melakukan pekerjaan. Itu menciptakan server DNS proksi (di komputer Anda sendiri) dengan file host sendiri. File host menerima wildcard.

Unduh dari situs web resmi

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

Mengkonfigurasi Proksi DNS Akrilik

Untuk mengkonfigurasi Acrylic DNS Proxy, instal dari tautan di atas, lalu buka:

  1. Mulailah
  2. Program
  3. Proxy DNS Akrilik
  4. Konfigurasi
  5. Edit File Host Kustom (AcrylicHosts.txt)

Tambahkan baris berikut di akhir file:

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

Mulai ulang layanan Acrylic DNS Proxy:

  1. Mulailah
  2. Program
  3. Proxy DNS Acrilic
  4. Konfigurasi
  5. Mulai kembali Layanan Akrilik

Anda juga perlu menyesuaikan pengaturan DNS di pengaturan antarmuka jaringan Anda:

  1. Mulailah
  2. Panel kendali
  3. Jaringan dan Internet
  4. Koneksi jaringan
  5. Properti Koneksi Area Lokal
  6. TCP / IPv4

Setel "Gunakan alamat server DNS berikut":

Preferred DNS Server: 127.0.0.1

Jika Anda kemudian menggabungkan jawaban ini dengan jawaban jeremyasnyder (menggunakan VirtualDocumentRoot) Anda kemudian dapat secara otomatis mengatur domain / host virtual dengan hanya membuat direktori.


12
Untuk lebih jelasnya, "file host kustom" adalah AcrylicHosts.txt, bukan AcrylicConfiguration.ini. Mungkin itu harus jelas, tetapi itu membingungkan saya untuk sementara waktu.
mhenry1384

@ Petah - konfigurasi yang tepat ini berfungsi untuk saya dengan domain wildcard, tetapi hanya berhenti dan saya tidak tahu mengapa. Semua permintaan kembali "Halaman ini tidak tersedia". Acryllic yang dimulai ulang, setel ulang semua cache ... menurut Anda apa lagi itu?
SB2055

1
@ SB2055 periksa pengaturan DNS Anda di properti jaringan Anda masih benar.
Petah

Perlu dicatat bahwa Acrylic tidak cocok untuk situasi di mana lingkungan jaringan Anda sering berubah. Server DNS publik Google tidak akan menyelesaikan nama mesin nyata dalam jaringan Anda ... dan Anda dapat memperbaikinya untuk satu jaringan, tetapi Anda masih tidak dapat menyelesaikan nama mesin internal saat Anda masuk ke jaringan lain. Ini bisa sangat menyakitkan. Tetapi saya juga harus menunjukkan bahwa saya tidak tahu semua yang perlu diketahui tentang Akrilik.
Alex Dresko

Jika ini dilakukan dalam VM, maka PrimaryServerAddresskonfigurasi (bukan file host) harus diubah dari default 8.8.8.8ke yang disediakan host. Di VirtualBox, ini 10.0.2.3.
mightyiam

80

Untuk menjawab pertanyaan Anda, Anda tidak dapat menggunakan wildcard di file host di Windows.

Namun, jika Anda hanya ingin mengubah file host agar situs baru berfungsi .... Anda dapat mengonfigurasi Apache Anda seperti ini dan Anda tidak harus terus mengeditnya, konfigurasi:

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

Pada dasarnya ringkasan cepat berdasarkan pengaturan saya, tambahkan berikut ini ke file apache.conf Anda:

 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>

Ini memungkinkan saya untuk menambahkan entri seperti:

127.0.0.1       test.dev

lalu buat direktori, c: \ xampp \ sites \ dev \ test dan tempatkan file-file yang diperlukan di sana dan itu hanya berfungsi.

Opsi lainnya adalah menggunakan <Directory>tag di apache.conf dan referensi halaman dari http: // localhost / project / .


Bisakah Anda menggunakan wildcard di OSX?
cjm2671

Ya menggunakan Bind - clintberry.com/2011/...
Ryan Schumacher

30

Saya pikir itu tidak mungkin.

Anda tetap harus memodifikasi entri apro virtualroot setiap kali Anda menambahkan situs dan lokasi baru, jadi itu bukan pekerjaan besar untuk menyinkronkan nama baru ke file Windows vhost.

Perbarui: silakan periksa jawaban berikutnya dan komentar pada jawaban ini. Jawaban ini berumur 6 tahun dan tidak benar lagi.


3
Tetapi ketika menggunakan Nginx tidak perlu mengubah file konfigurasi Nginx untuk menambahkan grup baru domain tingkat kedua * .localhost. Jadi, ini adalah minus dari file hosts.
sergzach

8
Hanya untuk menunjukkan bahwa ketika Anda memiliki situs web multibahasa, Anda mungkin memiliki <VirtualHost> dengan ServerAlias *.mydomain.localhost( *menjadi kode bahasa), sehingga Anda tidak perlu mengedit httpd.conf setiap kali Anda menambahkan bahasa baru; tetapi Anda masih perlu menambahkan subdomain ke file host, maka relevansi pertanyaan di atas.
Benjamin

10
Dynamic Virtual Hosts adalah kata kunci di sini dan didukung oleh sebagian besar server, yaitu Apache dan Nginx. Jadi tidak, Anda pasti tidak perlu menyentuh konfigurasi-Apache Anda setiap kali Anda membuat proyek.
Valentin Klinghammer

2
Kami dapat memiliki host virtual wildcard juga, itu hanya ke hostsfile benar
ericn

6

Untuk menambah saran hebat yang sudah ada di sini, XIP.IO adalah server DNS wildcard fantastis yang tersedia untuk umum.

      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

(Kemampuan untuk menentukan alamat non-loopback fantastis untuk menguji situs di perangkat iOS di mana Anda tidak dapat mengakses file host.)

Jika Anda menggabungkan ini dengan beberapa konfigurasi Apache yang disebutkan dalam jawaban lain, Anda berpotensi menambah VirtualHosts dengan nol pengaturan .


Dan itu berfungsi untuk anggota tim Anda jika IP di LAN Anda. Mereka tidak harus menginstal server DNS lokal dengan file host yang sama.
Tobias Uhmann

4

Saya menemukan posting tentang Menggunakan File Host Windows yang juga mengatakan "Tidak ada wildcard diizinkan."

Di masa lalu, saya baru saja menambahkan entri tambahan ke file host, karena (seperti yang dikatakan sebelumnya), itu tidak banyak bekerja ekstra ketika Anda sudah mengedit file konfigurasi apache.


Semakin lama Anda membuat file hosts, semakin lama waktu yang dibutuhkan untuk menyelesaikan permintaan. Bukan solusi yang bagus jika Anda punya banyak entri.
cchamberlain

4

Mengedit file hosts tidak terlalu merepotkan ketika Anda menjalankan "ipconfig / flushdns" dari command prompt windows, alih-alih menyalakan kembali komputer Anda.


1
itu tidak membersihkan cache browser dns, tetapi jendela. Jadi dia harus menunggu 20-30 menit agar browser merilis caching dns.
Jacob Melvad Jensen

3

Anda dapat berbicara dengan administrator jaringan untuk mengatur domain untuk Anda (katakan 'evilpuppetmaster.hell') dan memiliki wildcard di sana sehingga semuanya (* .evilpuppetmaster.hell ') diputuskan ke IP Anda


1
Terima kasih tetapi ini ada di devserver rumah, tidak ada DNS atau administrator jaringan yang tersedia.
EvilPuppetMaster

Oke, mungkin Anda memiliki akses ke domain atau kenal seseorang yang punya? Contoh: * .evilpuppetmatser.arealdomain.com
Stu Thompson

Tidak juga. Meski begitu, ini adalah mesin rumah sehingga mendapat IP baru setiap kali router saya terhubung ke internet. Server DNS eksternal tidak akan membantu.
EvilPuppetMaster

1
1) Tidak ada alasan * .evilpuppetmatser.arealdomain.com tidak dapat menyelesaikan ke 127.0.0.1, 2) saya tidak menyarankan server DNS eksternal. Saya menyarankan agar Anda menggunakan sub-domain pada domain nyata. Secara teknis, siapa pun dapat menyelesaikan server.evp.arealdomain.com.
Stu Thompson

3
Ada juga beberapa yang publik seperti * .127.0.0.1.xip.io dan lainnya
Dave James Miller

3

Kami memiliki ini berfungsi menggunakan wildcard DNS di server DNS lokal kami: tambahkan Acatatan seperti*.local -> 127.0.0.1

Saya pikir bahwa pengaturan jaringan Anda perlu memiliki akhiran domain yang dipilih dalam daftar pencarian akhiran domain untuk mesin di jaringan, jadi Anda mungkin ingin mengganti .localdengan domain internal perusahaan Anda (misalnya .int) dan kemudian menambahkan subdomain seperti.localhost.int untuk membuatnya jelas untuk apa itu

Jadi *.localhost.intakan menyelesaikan 127.0.0.1untuk semua orang di jaringan, dan pengaturan file konfigurasi untuk semua pengembang akan "hanya bekerja" jika titik akhir menggantung subdomain itu misalnya site1.localhost.int, site2.localhost.intIni cukup banyak skema yang telah kami perkenalkan.

dnsmasq juga terlihat bagus, tapi saya belum mencobanya: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/




2

Saya menggunakan DNSChef untuk melakukan itu.

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

Anda harus mengunduh aplikasi, di Linux atau Mac Anda perlu python untuk menjalankannya. Windows memiliki exe sendiri.

Anda harus membuat file ini dengan entri dns Anda, misalnya

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

Maka Anda harus meluncurkan aplikasi dns dengan hak admin

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

atau di windows

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

Akhirnya Anda perlu men-setup sebagai DNS Anda satu-satunya di lingkungan host lokal Anda (jaringan, antarmuka, dns atau yang serupa atau di linux /etc/resolv.conf).

Itu dia


2

Saya membuat alat sederhana ini untuk menggantikan tuan rumah. Ekspresi reguler didukung. https://github.com/stackia/DNSAgent

Konfigurasi sampel:

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

Saya tidak dapat menemukan larangan secara tertulis, tetapi dengan konvensi, file host Windows dengan ketat mengikuti file host UNIX, dan Anda tidak dapat memasukkan referensi nama host wildcard ke file itu.

Jika Anda membaca halaman manual, dikatakan:

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

Meskipun dikatakan,

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

itu tidak benar dari tingkat praktis.

Pada dasarnya, kode yang terlihat pada file / etc / hosts tidak mendukung entri wildcard.

Solusinya adalah membuat semua entri sebelumnya, mungkin menggunakan skrip untuk meletakkan beberapa ratus entri sekaligus.


0

@petah dan Acrylic DNS Proxy adalah jawaban terbaik, dan pada akhirnya ia merujuk kemampuan untuk melakukan multi-situs menggunakan Apache yang @jeremyasnyder menjelaskan sedikit lebih jauh ke bawah ...

... Namun, dalam kasus kami, kami menguji sistem hosting multi-penyewa dan sebagian besar domain yang ingin kami uji coba sama virtualhost, sementara beberapa lainnya diarahkan ke tempat lain.

Jadi dalam kasus kami, Anda cukup menggunakan wildcard regex dalam ServerAliasarahan, seperti ...

ServerAlias *.foo.local

0

Berikut adalah konfigurasi total untuk mereka yang berusaha mencapai tujuan (wildcard dalam lingkungan dev yaitu, XAMPP - contoh ini mengasumsikan semua situs menunjuk ke basis kode yang sama)

file hosts (tambahkan entri)

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

127.0.0.1   example.local

Konfigurasi httpd.conf (aktifkan vhosts)

file: \ XAMPP \ etc \ httpd.conf

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

Konfigurasi httpd-vhosts.conf

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

restart apache

buat file pac:

simpan sebagai apa pun.pac di mana pun Anda inginkan dan kemudian muat file di jaringan browser> proxy> pengaturan konfigurasi auto_ (muat ulang jika Anda mengubahnya)

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

Tidak berfungsi, belum tahu tentang PAC tetapi baris ini 'kembalikan "PROXY example.local";' tidak akan mengembalikan ip proxy: port yang akan digunakan oleh browser sebagai proxy?
ion

0

Anda dapat menggunakan echoipdns untuk ini ( https://github.com/zapty/echoipdns ).

Dengan menjalankan echoipdns local semua permintaan untuk .local subdomain dialihkan ke 127.0.0.1, sehingga setiap domain dengan xyz.local dll akan menyelesaikan ke 127.0.0.1. Anda dapat menggunakan suffix lain juga hanya mengganti lokal dengan nama yang Anda inginkan.

Echoipdns bahkan lebih kuat, ketika Anda ingin menggunakan url Anda dari mesin lain di jaringan Anda masih dapat menggunakannya dengan konfigurasi nol.

Misalnya, jika alamat ip mesin Anda adalah 192.168.1.100, Anda sekarang dapat menggunakan nama domain xyz.192-168-1-100.local yang akan selalu berubah menjadi 192.168.1.100. Keajaiban ini dilakukan oleh para echoipdns dengan melihat alamat ip di bagian kedua nama domain dan mengembalikan alamat ip yang sama pada permintaan DNS. Anda harus menjalankan echoipdns pada mesin dari mana Anda ingin mengakses sistem jarak jauh.

echoipdns juga dapat disetel sebagai proksi DNS mandiri, jadi cukup arahkan ke DNS ini, kini Anda dapat menggunakan semua manfaat di atas tanpa menjalankan perintah khusus setiap saat, dan Anda bahkan dapat menggunakannya dari perangkat seluler.

Jadi pada dasarnya ini menyederhanakan pengembangan DNS berbasis domain wildcard untuk lingkungan lokal maupun tim.

echoipdns berfungsi di Mac, Linux dan Windows.

CATATAN: Saya penulis untuk echoipdns.


0

Konfigurasi untuk subdomain otomatis nginx config dengan Acrylic DNS Proxy

file auto.conf untuk folder situs nginx Anda

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

Tambahkan ke file Host akrilik 127.0.0.1 example.com *.example.comdan mulai ulang layanan Acrylic. $ branch - nama subdomain Anda.

Tetapkan alih-alih root / var / www / html / $ branch / public; jalur proyek Anda


0

Ini dapat dilakukan dengan menggunakan Pi-Hole , cukup edit "/ etc / hosts" dan restart layanan dns.

nano /etc/hosts
pihole restartdns

Contoh:

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

Anda dapat menggunakan klien DNS dinamis seperti http://www.no-ip.com . Kemudian, dengan server DNS eksternal CNAME * .mydomain.com ke mydomain.no-ip.com.


2
yang akan menyelesaikan ip eksternal Anda, dan biasanya itu hanya akan memunculkan router / modem config Anda
Sam

-1

Meskipun Anda tidak dapat menambahkan wildcard seperti itu, Anda dapat menambahkan daftar lengkap situs yang Anda butuhkan, setidaknya untuk pengujian, yang berfungsi cukup baik bagi saya, dalam file host Anda, Anda cukup menambahkan:

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


Saya pikir poster asli berusaha menghindari kerumitan langkah ini.
Simon East
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.