2012-01-25 3 views
1

Я пытаюсь найти правильное регулярное выражение, чтобы переписать все поддомены на www.nginx переписать все поддомены на www

так, например w7w.domain.com к www.domain.com

или alskdaslkdja.domain.com к www.domain.com

я пробовал много вещей, моя последняя попытка была :

if ($host ~* (?!www\.)(.*)) 
{ 
    set $host_without_www www.$1; 
    rewrite ^(.*)$ http://$host_without_www$1 permanent; 
} 

но это тоже не сработало.

Мне нужно поймать их и не могу просто переделать wildcart на www.domain.com , потому что у меня есть несколько доменов, которые будут обслуживаться на этом экземпляре.

любые идеи?

ответ

1
server { 
    listen   xx.xx.xx.xx:80; 
    server_name  www.example.com; 
    # .... 
} 
server { 
    listen   xx.xx.xx.xx:80; 
    server_name  example.com *.example.com; 
    rewrite  ^http://www.example.com$request_uri? permanent; 
} 
+0

спасибо, но, как я сказал, я не могу сделать это таким образом, потому что у меня есть много доменов, которые обслуживаются из этого, и я не могу позволить себе, чтобы создать запись сервера для всех из них. –

0
server { 
    # Prefix server wildcards are checked before regexes, so this 
    # will catch anything starting with www. 
    server_name www.*; 
} 

server { 
    # This should redirect anything that didn't match the first 
    # server to domain.tld 

    # I think this regex will capture the domain.tld 
    server_name ~(?<domain>[^.]+\.[^.]+)$ 

    rewrite^http://www.$domain$request_uri? permanent; 
} 
+0

ах это тоже не сработает, потому что у меня есть другие поддомены, которые тоже работают на коробке. (mail.example.com и т. д.), и это сломает те, которые я думаю. –

+0

Имена серверов Regex оцениваются последними. Если у вас есть сервер {имя_сервера mail.example.com; } или даже сервер {server_name mail. *; }, то он будет соответствовать имени сервера regex. – kolbyjack

Смежные вопросы