14

Linux システムで Apache2 を使用して、mod_vhost_aliasを使用して複数の VirtualDocumentRoot を持つ方法はありますか?

これは私が現在使用している命名規則であり、引き続き使用したいと考えています。

host                    directory
127.0.0.1 domain        domain.com
127.0.0.1 sub.domain    domain.com_sub

次に、httpd.conf の vhosts セクションに次のものがあります。

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
    VirtualDocumentRoot /var/www/%0.0.com
</VirtualHost>

<VirtualHost 127.0.0.1>
    VirtualDocumentRoot /var/www/%2.0.com_%1
</VirtualHost>

これの問題は、sub.domain にアクセスすると、Apache エラー ログが、/var/www/domain.com_test ではなく /var/www/sub.domain.com を探していることを示しているため、最初のルールは失敗しますが、2 つの VirtualDocumentRoot ルールのいずれかを満たす任意のドキュメント ルートを使用するようにしたいと考えています。

4

5 に答える 5

14

通常、Apache は、 HTTP ヘッダーで指定されたホスト名ServerNameServerAlias一致する最初の仮想ホストを選択します。Hostあなたの場合、ServerNameディレクティブがないため、Apache はおそらく IP アドレスでリバース DNS ルックアップを使用してサーバー名を偽造し、リバース DNS が一致しない domain.com につながると仮定すると、Apache はデフォルトで最初の仮想ホスト。複雑に聞こえますが、私は知っています...要点は、構成を明示的にするためにServerNameandを使用する必要があるということです。ServerAliasこのようなことをもっと試してください:

NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
    ServerName domain.com
    ServerAlias www.domain.com
    VirtualDocumentRoot /var/www/%0
</VirtualHost>
<VirtualHost 127.0.0.1>
    ServerName sub.domain.com
    ServerAlias *.domain.com
    VirtualDocumentRoot /var/www/%2.%3_%1
</VirtualHost>

これは、 http://domain.com と http://www.domain.com に使用する必要が/var/www/domain.comありどちら/var/www/www.domain.com最初の vhost によって提供され、http://sub.domain.comはhttp ://に使用する必要があります。 blah.domain.comなど。/var/www/sub.domain.com/var/www/blah.domain.com

于 2009-02-15T09:16:48.590 に答える
4

「.」を付けたい場合は、後方参照を修飾する必要があります。ファイルパスで。したがって、次のようにする必要があります。

VirtualDocumentRoot /var/www/%2.0.%3_%1
于 2010-07-30T05:23:27.620 に答える
2

OPと「/var/www/html」が設定されている問題について:

私が抱えていた問題は、%2 の代わりに %1 を使用していたことです。これが私の実際の例です:

ServerAlias www.*.org.au
UseCanonicalName Off
VirtualDocumentRoot /path/to/sites/%2/pub

それが誰かを助けることを願っています!

mod_vhost_alias docsの「Directory Name Interpolation」に関するドキュメントを読みました。

于 2010-03-24T07:26:30.420 に答える
1

柔軟なサブドメインの作成を可能にする構成を最終的に見つけました。

mod_vhost_alias のapache ドキュメントを参照してください

ルート dev ドメインに dev.example.com のような 3 つの部分がある場合%-4+、ルート ドメインの前のすべてのプレースホルダーとして使用できます。4 つのパーツがある場合は、 を使用します%-5+

<VirtualHost *:80>
    VirtualDocumentRoot "/var/www/%-4+/webroot"
    ServerName www.dev.example.com
    ServerAlias *.dev.example.com
    php_admin_value auto_prepend_file /var/www/setdocroot.php
</VirtualHost>

このようにして、という名前のディレクトリを作成/var/www/sub.domain/webrootし、 url でアクセスできますsub.domain.dev.example.com

この行php_admin_value auto_prepend_file /var/www/setdocroot.phpは、OSX 10.9+ などの一部のシステムで docroot を修正します。

の内容は次のsetdocroot.phpとおりです。

<?php
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);
?>
于 2015-06-01T13:05:52.930 に答える
0

この構成で私が気付いているのは、$ _SERVER['DOCUMENT_ROOT']がvhostのドキュメントルートではなく/var/ www/htmlを指していることです。変。

更新(2010-07-24):

httpプルーフサー​​バーのセットアップ方法に関するブログ投稿を書いたばかりです http://www.devcha.com/2010/07/how-to-setup-your-http-proof-server.html

于 2010-02-16T17:28:00.997 に答える