2015-03-31 4 views
1

Я пытаюсь перенаправить/переписать url для создания субдомена для подстраниц. например: http://example.com/user вернет url как http://user.example.com, но не сможет найти способ. Мое приложение находится в рубин на рельсах и nginx сервер. Есть ли уловка для этого?Создание субдомена на сервере nginx

+0

Как вы хотите иметь дело с запросом, предлагающим сказать: http://example.com/users/new? Вы хотите, чтобы это произошло: http://new.example.com ИЛИ http://users.example.com ИЛИ что-то еще? – Sahil

+0

Я хочу 'example.com/user' to' user.example.com' – tyson

ответ

2

Следующая следует позаботиться о перенаправлении подобласти.

server { 
    server_name example.com; 

    location ~ ^/(?<user>[^/]+)/?$ { 
     return 301 $scheme://$user.$server_name; 
    } 
} 
+0

эй большое спасибо. Он отлично работает. Еще одна помощь, так как я новичок в ** ngnix сервере ** Можете ли вы предложить мне какой-то онлайн-ресурс, чтобы понять их ** переписать **, ** return ** и ** регулярное выражение, написание ** понятий ясно. – tyson

+1

[nginx docs] (http://nginx.org/en/docs/) - хорошая отправная точка. Я также нашел [nginx ловушки] (http://wiki.nginx.org/Pitfalls), чтобы быть особенно полезными. –

0

Вы можете сделать это в своем приложении Rails. Просто добавьте правило для ваших маршрутов файлов:

get '/', to: 'users#show', constraints: { subdomain: /\d+/ }

Тогда что когда вы посещаете *.example.com, он будет перенаправлять users#show.

Проверьте этот учебник для получения дополнительной информации Rails Routing Guide, часть 3.8.

В противном случае вы можете переписать конфигурацию в конфигурации nginx. Я не уверен, что это работает, проверьте this guide

server { 
    listen  80; 
    server_name user.example.com; 
    return 301 example.com/user 
} 

Надеется, что это полезно.

UPDATE

Вам просто нужно переписать Nginx конфигурации.

server { 
    listen  80; 
    server_name example.com; 
    rewrite \/home$ $scheme://home.example.com; 
} 

Затем сохраните конфигурации, загрузите Nginx с помощью sudo service nginx reload для загрузки файла конфигурации.

Сообщите мне, если вы все еще беспокоитесь.

+0

на самом деле мои настройки route.rb выглядят так :::::::: root to: 'pages # home' get 'home' => 'pages # home' – tyson

+0

Я просто хочу переписать/вернуть свой url как http://example.com/home на http://home.example.com. Я использую Amazon EC2 для хостинга. – tyson

+0

Извините, я не понимаю, что вы имеете в виду. Причина, по которой эта конфигурация маршрута не относится к вашему вопросу выше. – duykhoa

1

Возможно, вам лучше всего посмотреть на wildcard subdomain на Nginx и сопровождать это с помощью маршрутизации Rails для пользователей.

Помните, у Nginx нет подключений к вашей базе данных. Так что Nginx conf действительно просто должен иметь возможность отправлять веб-трафик через сервер в ваше приложение rails.

Маршрутизация приложений Rails затем может использоваться для отправки трафика на определенные пользовательские страницы , если пользователь существует. Вы бы сделать это с constraint

-

Вот что я хотел бы сделать:

/etc/nginx/nginx.conf (or wherever your nginx config is stored) 
server { 
    server_name yourdomain.com *.yourdomain.com; 
    ... 
} 

Это даст вам возможность передавать любые запросы поддоменов через ваше приложение рельсы.

Я бы тогда сделать это в Rails routes:

config/routes.rb 
#put this at the top of the file so it does not conflict 
get '', to: 'users#index', constraints: lambda { |request| User.exists?(name: request.subdomain) } 
+0

на данный момент, если у этого config/routes.rb ' root to: 'pages # home' get 'home' => 'pages # home'' где страницы - это моя директория, хранящаяся в **/my_app/app/view/pages **, а home is my ** home.html.erb ** страница – tyson

+0

Ваш вопрос: «Я пытаюсь перенаправить/переписать url для создания субдомена для подстраниц. '- Я не понимаю, что с этим« root »? –

+0

ok моя основная линия, которая направляет меня на ** home.html.erb ** страница 'get 'home' => 'pages # home'' – tyson

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