3

小さな仮想プライベートサーバーでlighttpdをいじっています。サーバーを指す2つのドメイン。Ubuntu 8.10 で最新バージョンの lighttpd と mod_evhost を使用しています。

  1. 誰かがdomain.com またはwww.domain.comをリクエストした場合に/webroot/domain.com/www/から提供されるようなルールを設定しようとしています

  2. 同様に、誰かがsub.domain.comをリクエストすると、/webroot/domain.com/sub/ から提供されます。

  3. 人々がfake.domain.com ( /webroot/domain.com/fake/が存在しない場所) を要求した場合、/webroot/domain.com/www/ から提供されることを望みます。

3 番目の要件はそれほど重要ではありません。fake.domain.comを要求したとしても、 /webroot/server.com/www/ のサーバー ドキュメント ルートから提供される、存在しないサブドメインを要求する人々に対処できます

以下に、lighttpd.conf ファイルの関連部分を含めました。

server.document-root = "/webroot/server.com/www/"

// regex to match sub.domain.com
$HTTP["host"] =~ "\b[a-zA-Z]\w*\.\b[a-zA-Z]\w*\.\b[a-zA-Z]\w*" {
    evhost.path-pattern = "/webroot/%0/%3/"    
}

// regex to match domain.com    
$HTTP["host"] =~ "\b[a-zA-Z]\w*\.\b[a-zA-Z]\w*" {
    evhost.path-pattern = "/webroot/%0/www/"    
}

それで、どこが間違っているのですか?現在、 *. domain.comおよびdomain.comへのすべてのリクエストは、 /webroot/domain.com/www/から処理されています。

皆さんが提供できる助けをいただければ幸いです。関連するものを残している場合は教えてください!

乾杯、 ロブ

4

2 に答える 2

5

あなたの正規表現は少しやり過ぎのようです。

これが私が使うものです:

// regex to match sub.domain.com
$HTTP["host"] =~ "^[^.]+\.[^.]+\.[^.]+$" {
    evhost.path-pattern = "/webroot/%0/%3/"    
}

// regex to match domain.com    
$HTTP["host"] =~ "^[^.]+\.[^.]+$" {
    evhost.path-pattern = "/webroot/%0/www/"    
}

どこ:

[^.]+ matches anything but a dot, 1..n times

「www」にフォールバックする有効なサブドメインのみを照合するには、次を使用できます。

// default: route everything to "www"
$HTTP["host"] =~ "([^.]+\.)?domain\.com$" {
    evhost.path-pattern = "/webroot/%0/www/"
}

// specific regex overwrites "path-pattern" for valid sub-domains only
$HTTP["host"] =~ "^(valid1|valid2|sub)\.domain\.com$" {
    evhost.path-pattern = "/webroot/%0/%3/"    
}
于 2008-11-04T13:51:42.650 に答える
1

最初のものについては、domain.comwww.domain.com:に一致^\b([wW]{3}\.)?[\w\d]*\.com\b$し、2番目のものについては、対象のテキストの文字列を識別するために、正規表現がサブドメイン/ページが存在するかどうかを判断できるかどうかわかりません。うまくいけば、それはあなたを少し助けるでしょう。

于 2008-11-04T13:47:03.627 に答える