我正在尝试重定向/重写url以创建子页面的子域。例如:http://example.com/user会将网址返回http://user.example.com,但无法找到任何方式。 我的应用程序位于 ruby on rails 和 nginx 服务器上。这有什么诀窍吗?
答案 0 :(得分:2)
以下内容应该处理子域重定向。
server {
server_name example.com;
location ~ ^/(?<user>[^/]+)/?$ {
return 301 $scheme://$user.$server_name;
}
}
答案 1 :(得分:1)
您可能最好关注Nginx
上的wildcard subdomain,并为用户提供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应用程序。
然后我会在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) }
答案 2 :(得分: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
}
希望它有用。
<强>更新强>
你只需要重写你的nginx配置。
server {
listen 80;
server_name example.com;
rewrite \/home$ $scheme://home.example.com;
}
然后保存配置,使用重新加载nginx
sudo service nginx reload
重新加载配置文件。
如果您仍然担心,请告诉我。