Correspondance des domaines avec regex pour lighttpd mod_evhost (www.domain.com / domain.com / sub.domain.com)

StackOverflow https://stackoverflow.com/questions/261904

  •  06-07-2019
  •  | 
  •  

Question

Je joue avec lighttpd sur un petit serveur privé virtuel. Je deux domaines pointant vers le serveur. J'utilise la dernière version de lighttpd et de mod_evhost sur Ubuntu 8.10.

  1. J'essaie de configurer une règle telle que si quelqu'un demande domain.com ou www.domain.com , il reçoit les services de /webroot/domain.com/www /

  2. De même, si quelqu'un demande sub.domain.com , il est servi depuis /webroot/domain.com/sub /

  3. Si les internautes demandent fake.domain.com (où /webroot/domain.com/fake / n'existe pas), j'aimerais qu'ils soient servis à partir de < em> /webroot/domain.com/www /

La troisième exigence n’est pas si importante, je peux traiter avec les personnes qui demandent que des sous-domaines inexistants soient servis à partir de la racine du document serveur située à /webroot/server.com/www / même s'ils ont demandé fake.domain.com

J'ai inclus les parties pertinentes de mon fichier lighttpd.conf ci-dessous:

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/"    
}

Alors, où est-ce que je vais mal? Pour le moment, toutes les demandes adressées à *. Domain.com et à domain.com sont traitées depuis /webroot/domain.com/www / .

Je vous serais reconnaissant de toute aide que vous pourriez nous apporter et, si j'ai oublié quelque chose de pertinent, dites-le moi!

Salut, Rob

Était-ce utile?

La solution

Vos expressions rationnelles semblent être un peu exagérées.

Voici ce que je voudrais utiliser:

// regex to match sub.domain.com
$HTTP["host"] =~ "^[^.]+\.[^.]+\.[^.]+
[^.]+ matches anything but a dot, 1..n times
quot; { evhost.path-pattern = "/webroot/%0/%3/" } // regex to match domain.com $HTTP["host"] =~ "^[^.]+\.[^.]+
// default: route everything to "www"
$HTTP["host"] =~ "([^.]+\.)?domain\.com<*>quot; {
    evhost.path-pattern = "/webroot/%0/www/"
}

// specific regex overwrites "path-pattern" for valid sub-domains only
$HTTP["host"] =~ "^(valid1|valid2|sub)\.domain\.com<*>quot; {
    evhost.path-pattern = "/webroot/%0/%3/"    
}
quot; { evhost.path-pattern = "/webroot/%0/www/" }

où:

<*>

Pour ne faire correspondre que les sous-domaines valides avec un retour à "www", vous pouvez utiliser ceci:

<*>

Autres conseils

Pour votre premier numéro, domain.com et www.domain.com : ^ \ b ([wW] {3} \.)? [\ w \ d] * \. com \ b $ , et pour le second, je ne sais pas si regex peut déterminer si un sous-domaine / une page existe, comme pour identifier des chaînes de texte présentant un intérêt. J'espère que cela vous aidera un peu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top