Nginx-Servername Regex erlaubt Strich

654
hades

Ich habe eine Site, die auf Nginx läuft. Wenn der Servername auftaucht, stoße ich auf ein Problem bezüglich des Regex, da ich weiß, dass Nginx Perl Compatible Regular Expressions (PCRE) verwendet.

Nun mein Servername:

server_name "~^(?<subdomain>\w+)\.parentdomain\.com$";

Es erlaubt also nur den folgenden Fall:

abc.parentdomain.com

Aber ich möchte Strich in meiner Subdomain zulassen

abc-def.parentdomain.com

Ich habe versucht, das Muster zu ändern, aber kein Glück

server_name "~^(?<subdomain>\w\-+)\.parentdomain\.com$";

server_name "~^(?<subdomain>\w+\-)\.parentdomain\.com$";

server_name "~^(?<subdomain>\w+)(\-)\.parentdomain\.com$";

Stimmt etwas mit meiner Regex?

0

2 Antworten auf die Frage

2
grawity

Wenn Sie einfach eins nach dem anderen setzen, werden sie nicht in Alternativen umgewandelt - es wird nur eine Sequenz erstellt. Sie erlauben eine Reihe von Wortzeichen und dann einen Bindestrich. Zum Beispiel subdom-.example.com.

Sie müssen diese Klassen explizit als Alternativen markieren, z . B. (\w|-)oder [\w-].

server_name "~^(?<subdomain>(\w|-)+)\.parentdomain\.com$"; server_name "~^(?<subdomain>[\w-]+)\.parentdomain\.com$"; 

(Denken Sie darüber nach: Wenn PCRE automatisch alles in Alternativen umwandelt, würde das Wort "Parentdomain" in der Regex nicht "Parentdomain" zulassen) - es würde entweder "p" oder "a" oder "r" oder "e" zulassen " oder...)

2
Toto

Wenn Sie Bindestriche zwischen Wortzeichen zulassen möchten :

server_name "~^(?<subdomain>\w+(?:-\w+)*)\.parentdomain\.com$"; 

Woher

(?:-\w+)*ist eine Nicht-Capture-Gruppe, die einen Bindestrich gefolgt von einigen Wortzeichen erlaubt. Die Gruppe wird möglicherweise 0 oder mehr Male angezeigt. Es passt nicht zu aufeinander folgenden Strichen.

Es passt:

  • subdomain.parentdomain.com
  • sub-domain.parentdomain.com
  • sub-do-main.parentdomain.com
  • und so weiter...

aber nicht

  • sub--domain.parentdomain.com
  • -subdomain.parentdomain.com
  • subdomain-.parentdomain.com
  • ---.parentdomain.com