Windowsホストファイルのワイルドカード


289

のリクエスト*.localがにリダイレクトされるように、ローカル開発マシンをセットアップしたいlocalhost。アイデアは、私は複数のサイトを開発するよう、私はちょうどと呼ばれるApacheのバーチャルホストにを追加できるということであるsite1.localsite2.localなど、及びそれらをすべてに決意を持っているlocalhostApacheはそれに応じて別のサイトを提供していながら、。

私はWindows XPを使用しています。

追加してみました

127.0.0.1       *.local

私のc:\windows\system32\drivers\etc\hostsファイルに、また試しました:

127.0.0.1       .local

どちらも機能していないようです。

異なるポート番号に設定できることは知っていますが、どのポートがどれかを覚えるのが難しいので、これは苦痛です。

ローカルDNSサーバーや難しいものをセットアップする必要はありませんか?


1
回避策として、anysubdomain.reconn.co.ukを使用してください(オンラインの場合)。これは常にローカルホストを指します(以下の私の回答を参照)。
Paul Grimshaw

Apache vhosts ServerNameを解析し、hostsファイルを更新するスクリプトはどうですか?
Elvis Ciotti 2013

1
* .localには特別なセマンティクスがあると思います。存在しないものを使用する必要があります。* .devを使用します。
WraithKenny 2013

回答:


431

アクリルDNSプロキシ(無料のオープンソース)がその役割を果たします。独自のホストファイルを使用して、プロキシDNSサーバーを(独自のコンピューター上に)作成します。hostsファイルはワイルドカードを受け入れます。

公式サイトからダウンロード

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

アクリルDNSプロキシの構成

アクリルDNSプロキシを構成するには、上記のリンクからインストールしてから、次の場所に移動します。

  1. 開始
  2. プログラム
  3. アクリルDNSプロキシ
  4. 構成
  5. カスタムホストファイルの編集(AcrylicHosts.txt)

ファイルの最後に次の行を追加します。

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

Acrylic DNS Proxyサービスを再起動します。

  1. 開始
  2. プログラム
  3. Acrilic DNSプロキシ
  4. 構成
  5. アクリルサービスを再開

また、ネットワークインターフェイス設定でDNS設定を調整する必要があります。

  1. 開始
  2. コントロールパネル
  3. ネットワークとインターネット
  4. ネットワーク接続
  5. ローカルエリア接続のプロパティ
  6. TCP / IPv4

「次のDNSサーバーアドレスを使用する」を設定します。

Preferred DNS Server: 127.0.0.1

次に、この回答とjeremyasnyderの回答を(を使用してVirtualDocumentRoot)組み合わせると、ディレクトリを作成するだけで、ドメイン/仮想ホストを自動的にセットアップできます。


12
明確にするために、「カスタムホストファイル」はAcrylicHosts.txtであり、AcrylicConfiguration.iniではありません。多分それは明白なはずですが、それはしばらくの間私を混乱させました。
mhenry1384 2013年

@Petah-この正確な構成はワイルドカードドメインで機能していましたが、停止しただけで理由がわかりません。すべてのリクエストは「このページは利用できません」を返します。Acryllicを再起動し、すべてのキャッシュをリセットします...他に何ができると思いますか?
SB2055 2014年

1
@ SB2055ネットワークプロパティのDNS設定が正しいことを確認してください。
Petah 2014年

Acrylicは、ネットワーク環境が頻繁に変化する状況にはあまり適していません。GoogleのパブリックDNSサーバーはネットワーク内の実際のマシン名を解決しません...そして、1つのネットワークに対してそれを修正できますが、別のネットワークに移動するときに内部マシン名を解決することはできません。これは特に痛みを伴うことがあります。ただし、アクリルについて知っておくべきことがすべてわかっているわけではないことも指摘しておきます。
Alex Dresko

これがVM内で行われる場合PrimaryServerAddress、(hostsファイルではなく)構成のをデフォルト8.8.8.8からホストが提供するものに変更する必要があります。VirtualBoxでは、これは10.0.2.3です。
mayyiam 2015

80

質問に答えるために、Windowsのホストファイルではワイルドカードを使用できません。

ただし、hostsファイルのみを変更して新しいサイトを機能させる場合は、Apacheを次のように構成できます。構成を編集し続ける必要はありません。

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

基本的に、私のセットアップに基づいた簡単な要約です。次の内容をapache.confファイルに追加します。

 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>

これにより、次のようなエントリを追加できます。

127.0.0.1       test.dev

次に、ディレクトリc:\ xampp \ sites \ dev \ testを作成し、そこに必要なファイルを配置すれば、問題なく動作します。

もう1つのオプションは<Directory>、apache.confでタグを使用し、http:// localhost / project /からページを参照することです。


OSXでワイルドカードを使用できますか?
cjm2671

はい、バインドを使用します- clintberry.com/2011/...
ライアン・シューマッハ

30

可能だとは思いません。

とにかく、新しいサイトと場所を追加するたびにapache virtualrootエントリを変更する必要があるため、新しい名前をWindows vhostファイルに同期させるのは大した作業ではありません。

更新:次の回答とこの回答のコメントを確認してください。この答えは6歳で、もう正解ではありません。


3
ただし、Nginxを使用する場合、第2レベルドメイン* .localhostの新しいグループを追加するためにNginxの構成ファイルを変更する必要はありません。したがって、これはhostsファイルのマイナスです。
sergzach

8
多言語のWebサイトがある場合、<VirtualHost>がServerAlias *.mydomain.localhost*言語コード)である可能性があるため、新しい言語を追加するたびにhttpd.confを編集する必要がないことを指摘してください。しかし、ホストファイルにサブドメインを追加する必要があるため、上記の質問の関連性があります。
ベンジャミン

10
ここでは動的仮想ホストがキーワードであり、ApacheやNginxなどのほとんどのサーバーでサポートされています。したがって、プロジェクトを作成するたびにApache-configを変更する必要はありません。
Valentin Klinghammer

2
ワイルドカードの仮想ホストを使用することもできhostsます。実際に使用できるのはファイルのみです
ericn

6

XIP.IOは、すでにここにあるすばらしい提案に加えて、公に利用可能な素晴らしいワイルドカードDNSサーバーです。

      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

(非ループバックアドレスを指定する機能は、hostsファイルにアクセスできないiOSデバイス上のサイトをテストするのに最適です。)

これを他の回答で述べたApache構成のいくつかと組み合わせると、セットアップなしで VirtualHostsを追加できる可能性があります


また、LAN内のIPの場合は、チームメンバーに対して機能します。同じhostsファイルを使用してローカルDNSサーバーをインストールする必要はありません。
Tobias Uhmann

4

Windowsホストファイルの使用」に関する投稿に「ワイルドカードは使用できません」とも書かれています。

過去に、ホストファイルに追加のエントリを追加しました。これは(前述のとおり)、すでにApache構成ファイルを編集している場合、それほど余分な作業ではないためです。


hostsファイルを作成する時間が長いほど、リクエストの解決に時間がかかります。エントリが多い場合は、適切な解決策ではありません。
チェンバレン

4

コンピューターを再起動する代わりに、windowsコマンドプロンプトから "ipconfig / flushdns"を実行する場合、hostsファイルの編集はそれほど簡単ではありません。


1
ブラウザのDNSキャッシュはフラッシュされませんが、ウィンドウはフラッシュされます。そのため、ブラウザがDNSキャッシュを解放するまで20〜30分待つ必要があります。
Jacob Melvad Jensen 2012

3

ネットワーク管理者にドメインを設定してもらい(「evilpuppetmaster.hell」など)、そこにワイルドカードを設定して、すべて(* .evilpuppetmaster.hell ')がIPに解決されるようにすることができます。


1
おかげで、これはホーム開発サーバー上にあり、利用可能なDNSまたはネットワーク管理者がいません。
EvilPuppetMaster 2008

OK、多分あなたはドメインへのアクセス権を持っているか、そうする誰かを知っていますか?例:* .evilpuppetmatser.arealdomain.com
Stu Thompson

あんまり。それでも、これはホームマシンなので、ルーターがインターネットに接続するたびに新しいIPを取得します。外部DNSサーバーは役に立ちません。
EvilPuppetMaster 2008

1
1)* .evilpuppetmatser.arealdomain.comが127.0.0.1に解決できない理由はありません。2)外部DNSサーバーを提案していません。実際のドメインでサブドメインを使用することをお勧めします。技術的には、誰でもserver.evp.arealdomain.comを解決できます。
Stu Thompson

3
* .127.0.0.1.xip.ioなど、いくつかの公共のものもあります他の人
デイブ・ジェームス・ミラー

3

これは、ローカルDNSサーバーでワイルドカードDNSを使用して機能しています。A次のようなレコードを追加します。*.local -> 127.0.0.1

私はあなたのネットワーク設定がネットワーク上のマシンのドメインサフィックス検索リストで選択されたドメインサフィックスを持っている必要があると思うので.local、あなたは会社の内部ドメイン(例えば.int)に置き換えて、.localhost.intそれを明確にするようなサブドメインを追加したいかもしれません。それが何のためにあるのか。

だから、*.localhost.intに解決だろう127.0.0.1ネットワーク上の誰もが、すべての開発者のための設定ファイルの設定については、「単なる仕事」希望のエンドポイントがサブドメイン例えばことをオフにハングアップする場合はsite1.localhost.intsite2.localhost.intこれはかなり我々が導入した制度です。

dnsmasqも見栄えは良いですが、まだ試していません:http : //ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/




2

そのためにDNSChefを使用しています。

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

アプリをダウンロードする必要があります。LinuxまたはMacで実行するには、Pythonが必要です。Windowsには独自のexeがあります。

たとえば、dnsエントリを含むiniファイルを作成する必要があります。

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

次に、管理者権限でDNSアプリケーションを起動する必要があります

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

またはWindowsで

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

最後に、唯一のDNSとしてローカルホスト環境(ネットワーク、インターフェース、dnsなどまたはLinux /etc/resolv.conf)をセットアップする必要があります。

それでおしまい


2

ホストの代わりとしてこの簡単なツールを作りました。正規表現がサポートされています。 https://github.com/stackia/DNSAgent

サンプル構成:

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

書面での禁止事項は見つかりませんでしたが、慣例により、WindowsホストファイルはUNIXホストファイルのすぐ後にあり、ワイルドカードホスト名参照をそのファイルに含めることはできません。

manページを読むと、次のように書かれています。

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

とはいえ、

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

それは実際的なレベルからは正しくありません。

基本的に、/ etc / hostsファイルを調べるコードは、ワイルドカードエントリをサポートしていません。

回避策は、すべてのエントリを事前に作成することです。おそらくスクリプトを使用して、一度に数百のエントリを入力します。


0

@petahとAcrylic DNS Proxyが最良の答えです。最後に、彼は@jeremyasnyderが少し下に記述したApacheを使用してマルチサイトを実行する機能に言及しています...

...ただし、私たちのケースでは、マルチテナントホスティングシステムをテストしているため、テストするほとんどのドメインは同じvirtualhostに移動しますが、他のいくつかのドメインは別の場所に送られます。

したがって、この例では、ServerAliasディレクティブで正規表現のワイルドカードを使用するだけです。

ServerAlias *.foo.local

0

これは、目標を達成しようとする人の全体的な構成です(開発環境のワイルドカード、つまりXAMPP-この例では、すべてのサイトが同じコードベースを指していると想定しています)

hostsファイル(エントリを追加)

ファイル:%SystemRoot%\ system32 \ drivers \ etc \ hosts

127.0.0.1   example.local

httpd.conf設定(vhostsを有効にする)

ファイル:\ XAMPP \ etc \ httpd.conf

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

httpd-vhosts.conf構成

ファイル: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を再起動する

pacファイルを作成します。

好きな場所にwhatever.pacとして保存してから、ブラウザのネットワーク>プロキシ> auto_configuration設定にファイルをロードします(これを変更した場合は再ロードします)。

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

動作しませんでした。PACについてはまだ知りませんが、この行は 'return "PROXY example.local";'です。ブラウザがプロキシとして使用するプロキシip:portを返しませんか?
イオン

0

これにはechoipdnsを使用できます(https://github.com/zapty/echoipdns)。

echoipdns local .localサブドメインのすべてのリクエストを実行すると、127.0.0.1にリダイレクトされるため、xyz.localなどのドメインはすべて127.0.0.1に解決されます。他の任意のサフィックスを使用することもでき、localを必要な名前に置き換えるだけです。

Echoipdnsはさらに強力です。ネットワーク内の他のマシンのURLを使用したい場合でも、構成なしで使用できます。

たとえば、マシンのIPアドレスが192.168.1.100の場合、常に192.168.1.100に解決されるドメイン名xyz.192-168-1-100.localを使用できます。この魔法は、echoipdnsがドメイン名の2番目の部分のIPアドレスを確認し、DNSクエリで同じIPアドレスを返すことによって行われます。リモートシステムにアクセスするマシンでechoipdnsを実行する必要があります。

echoipdnsはスタンドアロンDNSプロキシとして設定することもできるため、このDNSをポイントするだけで、毎回特別なコマンドを実行しなくても上記のすべての利点を使用でき、モバイルデバイスからも使用できます。

したがって、これは基本的に、ワイルドカードドメインベースのローカルおよびチーム環境向けDNS開発を簡素化します。

echoipdnsは、Mac、Linux、およびWindowsで動作します。

注:私はechoipdnsの作成者です。


0

アクリルDNSプロキシを使用したnginx config autoサブドメインの構成

nginxサイトフォルダのauto.confファイル

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ファイルに追加して127.0.0.1 example.com *.example.com、Acrylicサービスを再起動します。 $ branch-サブドメイン名。

ルートの代わりに設定 / var / www / html / $ branch / public; プロジェクトパス


0

これはPi-Holeを使用して行うことができます。「/ etc / hosts」を編集して、dnsサービスを再起動するだけです。

nano /etc/hosts
pihole restartdns

例:

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などの動的DNSクライアントを使用できます。次に、外部DNSサーバーCNAME * .mydomain.comからmydomain.no-ip.comへ。


2
これは外部IPに解決され、通常はルーター/モデムの構成ページが表示されます
Sam

-1

このようなワイルドカードを追加することはできませんが、少なくともテストのために必要なサイトの完全なリストを追加するには、hostsファイルに次のように追加するだけです。

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


元のポスターはこのステップの面倒を回避しようとしていると思います。
Simon East
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.