1. ホーム
  2. php

[解決済み] Apacheのバーチャルホストが期待通りに動作しない

2022-02-10 23:44:22

質問

私のアパッチ "httpd-vhosts.conf" は次のようになります。

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/"
    ServerName localhost
    ServerAlias *.localhost
</VirtualHost>

<VirtualHost laravel.dev:80>
    DocumentRoot "c:/wamp/www/laravel/public"
    ServerName laravel.dev
    ServerAlias *.laravel.dev
</VirtualHost>

<VirtualHost learninglaravel.dev:80>
    DocumentRoot "c:/wamp/www/learningLaravel/public"
    ServerName learningLaravel.dev
    ServerAlias *.learningLaravel.dev
</VirtualHost>

と私の "...system32/drivers/etc/hosts" も次のようになります。

127.0.0.1       localhost
127.0.0.1       localhost

// I added the following entries. The first two entries above was already there
127.0.0.1       laravel.dev
127.0.0.1       learninglaravel.dev

を入力すると "learningLaravel.dev"。 "laravel.dev" をブラウザに入力すると、期待通り正常に動作します。しかし、私は他のフォルダを "www" フォルダにあるファイルにブラウザから直接アクセスできるようにしたいのです。 "localhost/test/me.php" . しかし、私がそのようなアドレスを入力するたびに、ブラウザは次のエントリの2番目に移動します。 vhosts-conf ファイルが見つからないという意味のlaravelのエラーが表示されます)。の最初のエントリが見つからないようです。 vhosts-conf ファイルが動作しておらず、Apache はそれをバイパスして 2 番目のエントリに移動します。最初のエントリは、キャッチオールエントリであることが前提です。2番目と3番目のエントリを入れ替えてどうなるか試してみましたが、 ブラウザは常に2番目のエントリに誘導され、キャッチオール(1番目のエントリ)の代わりに アドレスが処理されると思われる、次のようなエントリが表示されます。 "localhost/test/me.php"。

を入力すると、いつでも "localhost"。 の内容を表示するのではなく、2番目のエントリに直行します。 "www" フォルダーに格納されます。

この問題を解決するにはどうすればよいですか? ありがとうございます。

どのように解決するのですか?

の使い方に問題があるようです。 VirtualHost ディレクティブを使用します。

バーチャルホストのIPアドレスに完全修飾ドメイン名を使用することは推奨されません。どのように動作するのか誤解を招く恐れがあるからです。名前ベースのバーチャルホストは ServerName ディレクティブのFQDNではなく VirtualHost ディレクティブ( <VirtualHost FQDN:80> ). 実際には、これは次のように見なされます。 <VirtualHost 127.0.0.1:80>

何が起こるかというと、あなたのケースが文書化されるのは 仮想通貨ドキュメント の最後の2段落("Security"の直前)を引用しています。

<ブロッククオート

リクエストを受信すると、サーバーはまず、そのリクエストを最適な ローカルIPアドレスとポートに基づくマッチング の組み合わせのみです。 ワイルドカードでない方が優先されます。 . 一致しない場合 IPとポートに基づくサーバー構成が全く発生しない場合、"main"サーバー構成が使用されます。 を使用します。

複数のバーチャルホストにベストマッチするIPアドレスと ポートに最も近いバーチャルホストを選択します。 を要求されたホスト名で指定します。 名前ベースのバーチャルホストにマッチするものがない場合 が見つかった場合、IPアドレスと一致する最初にリストアップされたバーチャルホス が使用されます。 . その結果、最初にリストアップされたバーチャルホストが 与えられたIPアドレスとポートの組み合わせが、そのデフォルトバーチャルホストとなります。 そのIPとポートの組み合わせ

ということで、依頼するときは localhost/somedir そのため、IP:Port を持つ最初の VHost をデフォルトとして選択し、*:Port を持つ最初の VHost は選択しないことになります。

この問題を解決するために <VirtualHost *:80> を 3 つの vhost 宣言のすべてで使用します。

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/"
    ServerName localhost
    ServerAlias *.localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/laravel/public"
    ServerName laravel.dev
    ServerAlias *.laravel.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/learningLaravel/public"
    ServerName learningLaravel.dev
    ServerAlias *.learningLaravel.dev
</VirtualHost>

そして、Apacheを再ロード/再起動します。

(これについての唯一の疑問は、なぜNasreddineがあなたのセットアップで動作するテストケースを作ることができたのかということです)。