正则表达式匹配只有一个子域的域

时间:2015-03-12 10:17:59

标签: regex .htaccess

我正在尝试为我的.htaccess创建一个正则表达式,匹配只有一个子域的域名

实施例

  • test1.subdomain.ourdomain.de 不匹配
  • subdomain.ourdomain.de 匹配 =>重定向到default.subdomain.ourdomain.de

到目前为止我所拥有的是这件丑陋的事情:

^([a-z0-9_\-]+)\.([a-z0-9_\-]+)\.ourdomain\.de$

它与test1.subdomain.ourdomain.de匹配,但没有test1。如何正确否定这一点?我对负面前瞻的尝试不起作用:-(

在此尝试:https://regex101.com/

2 个答案:

答案 0 :(得分:1)

你可以尝试这个:

^[^\.]+\.[^\.]+\.[^\.]+$

此处^[^\.]+会将该模式与该行开头的.匹配,然后我们匹配文字.,然后匹配到.,然后再次.,然后在最后我们匹配在行尾没有.的任何模式。

答案 1 :(得分:1)

此示例htaccess将从subdomain.ourdomain.de重定向到default.subdomain.ourdomain.de,并且http://first1.subdomain.ourdomain.de上不会匹配:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain.ourdomain.de$ [NC]
RewriteRule ^(.*)$ http://default.subdomain.ourdomain.de/ [R=301,NC,L]

要匹配任何1-subdomain网址,您需要使用具有相应RewriteCond的正确捕获组:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+\.[^.]+)$ [NC]
RewriteRule ^(.*)$ http://default.%1/ [R=301,NC,L]

输入http://tes1.clothes.germany.de

输出<NOTHING>未满足RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+\.[^.]+)$ [NC]条件

输入2 http://clothes.germany.de

输出网址http://default.clothes.germany.de/