Nginx. Как настроить redirect с subdomain'а на файл роутинга?

Здравствуйте!

Суть такова: есть связка Nginx + CentOS + PHP. Есть домен www.site.com.
В корне сайта есть файл-роутер index.php. На сайте может зарегистрироваться пользователь, под него выделяется "отдельный" поддомен.

Проблема: не могу настроить Nginx так, чтобы client.site.com редиректился на файл-роутер основного сайта. Более того, в файле роутера хотелось бы получить какой-нибудь параметр, что это такой-то поддомен. Папки клиентов существуют, но в них не может лежать своего обработчика. Только пользовательские картинки и тд... Обязательное условие настройки - у этих поддоменов должны быть свои SEO показатели (индексация поисковиками, посещаемость и так далее).
Может, кто-то уже такое реализовывал?

P.S. Объяснил не очень понятно. Приведу пример работы:
1) Пользователь заходит на www.site.com. site.com/index.php отдает ему основной сайт
2) Пользователь регистрируется и получает поддомен client.site.com. Для пользователя создается папка site.com/client/
3) Пользователь заходит на client.site.com... site.com/index.php - отдает ему отображение и шаблон сайта client.site.com
4) client.site.com индексируется поисковиками и тд.

Заранее спасибо за помощь!
  • Вопрос задан
  • 3310 просмотров
Решения вопроса 1
HDApache
@HDApache
PHP программист
Приведу только ключевые части конфига:
server {
    server_name site.com www.site.com;
    root /path/to_you/site_dir;
    location ~ /user/$ {
        deny all;
        access_log off;
        log_not_found off;
    }
    location ~ \.php$ {
        ...
        fastcgi_param USER_SUBDOMAIN "_MAIN_";
        ...
    }
}
server {
    server_name "~^(?<user_subdomain>[a-z0-9_-]{2,20})\.site\.com$";
    root /path/to_you/site_dir;
    location ~ /assets/$ {
        alias /path/to_you/site_dir/user/$user_subdomain/
    }
    location ~ \.php$ {
        ...
        fastcgi_param USER_SUBDOMAIN $user_subdomain;
        ...
    }
}

Доменное имя 3-го уровня станет доступно в глобальной переменной $_SERVER['USER_SUBDOMAIN'] В случае если там окажется значение _MAIN_ будет понятно что это домен 2-го уровня или www

Пользовательские директории (для пользователя visya) находятся по пути
http://visya.site.com/assets
а в файловой системе по пути
/path/to_you/site_dir/user/visya/

Можно конечно пойти дальше и все засунуть в одну директиву server
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы