Apache 仮想ホスト

Apache 仮想ホスト

私はこれをやろうと思っています

<VirtualHost *>
    ServerName myDomain.com
    DocumentRoot /var/www/myDomain

    <Directory /var/www/myDomain>
         Rewrite on
         RewriteRule ^blog/(.*)$ /var/www/myBlog/$1 [L]
    </Directory>
</VirtualHost>

それで http://www.myDomain.com/blog/別のディレクトリからファイルを読み取ります。上記は機能しないので、ファイルを移動せずにこれを行うにはどうすればよいですか?

答え1

このために mod_rewrite を使用する必要はありません。 エイリアスより適しています。

# Alias: Maps web paths into filesystem paths and is used to
# access content that does not live under the DocumentRoot.
Alias /blog /var/www/myBlog

ブログの設定を変更したい場合は、場所指令

<Location /blog>
    Allowoverride All
</Location>

答え2

次のようにします:

<VirtualHost *>
  ServerName myDomain.com
  DocumentRoot /var/www/myDomain
  Alias /blog/ /var/www/myBlog/
</VirtualHost>

答え3

LocationタグはApacheディレクティブの汎用コンテナに過ぎないので、ウェブサイトの「外部ビュー」セクションに適用したいものを「ラップ」するために使用します。複数の物理ディレクトリからコンテンツを1つの大きな構造に取り込む場合に非常に便利です。複数のDirectoryエントリを持つ代わりに、同じルールセットをそれらすべてに適用できます。

Aliasディレクティブは単純なリダイレクトであり、長いパスを短く簡潔なポインターとして表示するのに最適です。

DocumentRootディレクティブは、最上位の Web コンテンツ ディレクトリを設定します。

これらはすべてディレクトリを扱いますが、それぞれ少しずつ異なります。場所は主に、いわゆる「Web ビュー」、つまり外部からどのように見えるかを扱うためのものです。ディレクトリは、ファイルシステム上の実際のディレクトリを扱う「物理ビュー」のためのものです。1 つのディレクトリの内容が 1 つの URL として提供される場合、それらの間に機能的な違いはありません。

ただし、複数のディレクトリを「作成」し、必ずしもファイルシステム階層を反映しない複数の URL からそれらを提供する場合は、目的の効果を得るためにこれらすべてのディレクティブを組み合わせて一致させる必要があります。 2 つのディレクティブが 1 つの状況で同じように動作するからといって、別の状況でも同じように動作するとは限りません。

関連情報