4

ローカル開発マシンで自動化を設定しようとしています。通常、私はすべてのプロジェクトをこのように開始します

127.0.0.1 example.com www.example.com Hosts ファイルを開き、ファイルを開くなどの DNS エントリを設定し、httpd-vhosts.conf次のようにエントリを追加します。

<VirtualHost *>
    DocumentRoot "/path/to/xampp/htdocs/example.com"
    ServerName example.com
    ServerAlias www.example.com
</VirtualHost>

私が達成しようとしているのはhttpd-vhosts.conf、新しいホストで作業するたびにこのエントリを追加する必要がないように環境をセットアップすることです。

むしろhttpd-vhosts.conf、すべてのドメインを処理し、それらをそれぞれのディレクトリにマップできる1 つのグローバル エントリが必要です。

したがって、hostsファイルに次のようなレコードのリストがある場合

127.0.0.1 example.com
127.0.0.1 mysite.com
127.0.0.1 google.com
127.0.0.1 abc.com

そして、このようなフォルダ構造

/htdocs/
    /example.com/
    /mysite.com/
    /google.com/
    /abc.com/

VirtualHostファイルにレコードを追加しなくても、これらのディレクトリに自動的にマップされhttpd-vhosts.confます。

httpd-vhosts.confこれは、にワイルドカード エントリを追加し(方法はわかりません)、に.htaccess配置されたファイルにいくつかのリダイレクト ルールを追加/htdocs/して、ディレクトリにマップすることで実現できると推測できます。

そのため、最終的には、

  1. でワイルドカード エントリを設定する方法httpd-vhosts.conf
  2. .htaccessファイルに正確な書き換えルールを設定する方法/htdocs/

これは私が考えたもので、これを行うためのより良い方法もあるかもしれません。

4

3 に答える 3

6

1.でワイルドカードエントリを設定する方法httpd-vhosts.conf

*ドメイン名の前にアステリックス()を配置することにより、通常は配置しますwww

<VirtualHost *>
    DocumentRoot "/path/to/xampp/htdocs/example.com"
    ServerName example.com

    ServerAlias *.example.com

</VirtualHost>

2. /htdocs/の.htaccessファイルに正確な書き換えルールを設定する方法

RewriteEngine On
#RewriteCond %{HTTP_HOST} ^!example.com #(optional) do not redirect base domain
RewriteCond %{HTTP_HOST} (?(?=[a-z0-9\-\_]+\.[a-z0-9\-\_]{2,}$).+|[a-z0-9\-\_]+\.[a-z0-9\-\_]{2,})$
RewriteRule ^$ http://localhost/%0

これらすべてのドメイン:

www.example.com
img.example.com
cdn.example.com
static.img.example.com

にリダイレクトされ/example.comます。

説明

上記の機能は、基本的に、perdiodで区切られた最後の2つの文字列を取得し、新しく見つかったフォルダーにリダイレクトします。


技術的な観点から:

この正規表現はif then|elseパターンを使用します。1が見つかった場合は、それ2以外の場合は実行します3

テストを実行してから、テキストの結果に応じて2つのオプションのいずれかを続行します(?(?=[a-z0-9-_]+.[a-z0-9-_]{2,}$).+|[a-z0-9-_]+.[a-z0-9-_]{2,}$)

  1. (IF)この位置から始めて、以下の正規表現を一致させることができることを表明します(前向き)(?=[a-z0-9\-\_]+\.[a-z0-9\-\_]{2,}$)
    • 以下のリストにある1文字に一致します[a-z0-9\-\_]+
      • 1回から無制限の時間の間、可能な限り多く、必要に応じて還元する(貪欲)+
      • 「a」から「z」までの範囲の文字a-z
      • 「0」から「9」までの範囲の文字0-9
      • キャラクター\-
      • キャラクター\_
    • 文字「。」に一致します。文字通り\.
    • 以下のリストにある1文字に一致します[a-z0-9\-\_]{2,}
      • 2回から無制限の時間、可能な限り多く、必要に応じて還元する(貪欲){2,}
      • 「a」から「z」までの範囲の文字a-z
      • 「0」から「9」までの範囲の文字0-9
      • キャラクター\-
      • キャラクター\_
    • 文字列の最後の位置をアサートします(または、文字列の最後の改行の前(存在する場合))$
  2. (THEN)テストが成功した場合は、以下の正規表現に一致します.+
    • 改行文字ではない任意の1文字に一致します.+
    • 1回から無制限の時間の間、可能な限り多く、必要に応じて還元する(貪欲)+
  3. (ELSE)テストが失敗した場合、テストが成功した場合は、以下の正規表現に一致します[a-z0-9\-\_]+\.[a-z0-9\-\_]{2,}$
    • 以下のリストにある1文字に一致します[a-z0-9\-\_]+
    • 1回から無制限の時間の間、可能な限り多く、必要に応じて還元する(貪欲)+
    • 「a」から「z」までの範囲の文字a-z
    • 「0」から「9」までの範囲の文字0-9
    • キャラクター\-
    • キャラクター\_
    • 文字「。」に一致します。文字通り\.
    • 以下のリストにある1文字に一致します[a-z0-9\-\_]{2,}
    • 2回から無制限の時間、可能な限り多く、必要に応じて還元する(貪欲){2,}
    • 「a」から「z」までの範囲の文字a-z
    • 「0」から「9」までの範囲の文字0-9
    • キャラクター\-
    • キャラクター\_
  4. 文字列の最後の位置をアサートします(または、文字列の最後の改行の前(存在する場合))$

テストスイート:

a.bc
ab.cd
abc.def
ab.cd.ef
12.34
12.34.56
1.2.3.4.5.67
cnn.com
no_country.for.old.men
于 2013-03-19T12:31:51.907 に答える
2

このタスクを管理するには、いくつかの方法があります。このための特別なドキュメント ページが apache httpd Web サイトにあります。

これはいくつかの方法につながります:

  • mod_rewrite (専用ページ)、スイスのナイフですが、私の謙虚な意見では、これは不可解な構文と奇妙な動作につながります
  • mod_vhost_alias、単純な仮想ホストを設定する最も簡単な方法です (通常使用するものと同じくらい単純です)

また、より複雑なビジュアルホストについては、優れたモジュールであるmod_macroを確認する必要があります。このモジュールを使用すると、いくつかのパラメーター (ドメインとドキュメント ルートだけでなく、考えることができる任意の変数) を使用して仮想ホストのテンプレートを記述し、各仮想ホストのすべてのパラメーターを使用してこのマクロを呼び出す 1 行を追加するだけで済みます。

于 2013-03-13T12:46:38.137 に答える
1

ドメイン/サイトのリストから vhost 構成ファイルを生成する小さなスクリプトを作成し、すべての vhost 構成ファイルを別のディレクトリに置き、httpd.conf の Include ディレクティブで使用してすべての構成ファイルを含めます。そのディレクトリに。

于 2013-03-13T09:44:57.187 に答える