301 Редирект на основании существования document root

Горан Петрыч norman.k77 at gmail.com
Mon Oct 21 10:08:32 UTC 2013


Добрый день!

Захотелось создать универсальный *server_name ~^(?P<site>.+)$*; *root
/var/www/$site/pub; *
Все хорошо и работает. Но захотелось пойти дальше:

Если в /var/www/ лежит фолдер, который начинается *с* www, например
www.site.com, то делать 301 редирект с site.com -> www.site.com

Если же в /var/www/ лежит фолдер, который начинается *без *www, например
site.com, то делать 301 редирект с www.site.com -> site.com

Т.е. проверять наличие фолдера. Первое, что пришло на ум - это создать выше
основной секции, дополнительную:

*server_name ~^(?P<w>www)\.(?P<site>.+)$;*
*
*
* if (!-d /var/www/$w.$site/pub) {*
*        return 301 http://$site$request_uri;*
*    }*
* root /var/www/$site/pub;*

Это решает проблему когда нам нужно сделать 301 с www.site.com -> site.com.

Прошу помощи в том, как реализовать схему наоборот: 301 с site.com ->
www.site.com
Не могу додуматься.

В данный момент конфиг выглядит так:


*server_name ~^(?P<w>www)\.(?P<site>.+)$;*
*
*
* if (!-d /var/www/$w.$site/pub) {*
*        return 301 http://$site$request_uri;*
*    }*
* root /var/www/$site/pub;*
*......*
*
*
*
*
*server_name ~^(?P<site>.+)$*;
*root /var/www/$site/pub; *
*.......*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20131021/2cc8fd6d/attachment.html>


Подробная информация о списке рассылки nginx-ru