14

仮想ホストのフォールバックを作成しようとしています。私の構成は次のようになります。

# Fetch all pre-defined hosts

Include "conf/extra/vhosts/*.conf"

# Fallback

NameVirtualHost *:80

<Directory "C:/LocalServer/usr">
    Options Indexes FollowSymLinks Includes
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
<VirtualHost *:80>
    VirtualDocumentRoot "C:/LocalServer/usr/%-1/projects/%-2+/public/"
</VirtualHost>

ここでの目的は次のとおりです。 にアクセスしようとするとhttp://test.lab/、次のディレクトリが自動的に取得されるようにする必要がありますC:/LocalServer/usr/lab/projects/test/public/

これで、フォルダーと空のインデックス ファイル ( index.php) が作成されました。それにもかかわらず、Apache は空のディレクトリ インデックス (「Index of」) を表示し続けます。

今何をすべきかよくわかりません。いくつか試してみましたが、どれもうまくいかないようです。

何か案は?

更新 - 6 月 1 日

最初の回答(まあ、唯一の回答)に基づいて、このコードを使用しています。

<VirtualHost *:80>
    UseCanonicalName Off
    ServerAlias *.lab
    VirtualDocumentRoot "C:/LocalServer/%2/%1/public"
    <Directory "C:/LocalServer/%2/%1/public">
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Apache からアクセス禁止エラーが表示されるようになりました。ディレクトリが存在しない場合、通常、このエラーを受け取るのでしょうか? は存在し、ディレクトリにC:/LocalServer/lab/test/publicは空が存在します。index.phppublic

一般的なエラー ログのエラー:[client 127.0.0.1:49342] AH01797: client denied by server configuration: C:/LocalServer/lab/test/public/

<Directory/>グループを削除しても、何も変わりません。それでもエラーが発生します。%n(そのグループでも使えますか?)

クイックノート:

Include "conf/extra/vhosts/*.conf"以前は機能していなかったのは、命令によって他の仮想ホストがインポートされていたためです。それをコメントアウトすると (したがって、Labs ルールだけを作成すると)、アクセス禁止エラーが発生しました。

また、フォルダーを使用しなくなったことにも注意してください。usr各ラボは現在、labフォルダーの下にありますLocalServer

更新 2

ブロックで<Directory/>は変数の挿入が許可されていないようですVirtualDocumentRoot

更新 3 - 解決策が見つかりました

それは現在機能しています - 助けなしではそれを行うことはできなかったでしょう. 最終的なコードは次のとおりです。

<VirtualHost lab:80>
    UseCanonicalName Off
    ServerAlias *.lab
    VirtualDocumentRoot "C:/LocalServer/%2/%1/public"
    <Directory "C:/LocalServer/lab/*/public">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>

更新 4 (2015 年 4 月)

興味のある方向けの新しいディレクティブ (最新の Apache 2.4 を使用):

<VirtualHost *:80>
    UseCanonicalName Off
    ServerAlias *.local
    VirtualDocumentRoot "D:/home/%-2+/public_html"
    <Directory "D:/home/*/public_html">
        Require all granted
        AllowOverride All
        Options Indexes FollowSymLinks
    </Directory>
</VirtualHost>

これは、 Acrylic DNS Proxyと組み合わせることで、魔法のようになります。

更新 5 (2016 年 12 月)

私は現在、マクロアプローチを使用しています。

# Directory Macro - Default Directory configuration on a per-vhost basis

<Macro Directory $dir>
    <Directory "z:/var/www/$dir/public_html">
        Require all granted
        Options Includes Indexes FollowSymLinks
        AllowOverride All
    </Directory>
</Macro>

# LocalSub Macro - For specific *.*.local subs that require their own root

<Macro LocalSub $sub $domain>
    <VirtualHost 127.0.0.1>
        ServerName $sub.$domain.local
        DocumentRoot “z:/var/www/$domain/$sub/public_html”
        Use Directory $domain/$sub
    </VirtualHost>
</Macro>

Use LocalSub blog rockettpw

# Main virtual host

<VirtualHost 127.0.0.1>
    UseCanonicalName Off
    ServerAlias *.local *.*.local
    VirtualDocumentRoot “z:/var/www/%-2/public_html”
    Use Directory *
</VirtualHost>
4

2 に答える 2

11

私はそれらを使用します:)正規名をオフにすることを忘れていました-残念ながら、構成にServerAliasが必要な理由がわかりません-それなしでは機能しません-以下のコードはテストされ、機能しています

<Directory "C:/LocalServer/*/public">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require local
</Directory>

<VirtualHost *:80>
    # Apache will form URLs using the hostname supplied by the client
    UseCanonicalName Off

    # available aliases to use
    ServerAlias *.lab *.lab2

    # where to put them
    VirtualDocumentRoot "C:/LocalServer/%2/%1/public/"
</VirtualHost>
于 2013-05-31T21:53:24.330 に答える