1
robhsiao 2012-12-06 14:53:31 +08:00
用正则取从HTTP_HOST 取出.
|
2
kenneth OP |
3
kenneth OP 1000000这样的应该是数据库的一个字段,所以nginx解析的时候,如何处理呢?
不同于二级域名指向一级目录那种方式。 |
4
timonwong 2012-12-06 15:29:43 +08:00
@kenneth
1. 从request.host 解析出 二级域名 http://www.tornadoweb.org/documentation/httpserver.html#tornado.httpserver.HTTPRequest.host 2. self.redirect(url, permanent=True) http://www.tornadoweb.org/documentation/web.html#tornado.web.RequestHandler.redirect |
5
kenneth OP @timonwong
Tornado这里的正则该怎么写呢? application = tornado.web.Application([ (r"/", MainHandler), ],**settings) |
7
LazyZhu 2012-12-06 16:03:08 +08:00
|
8
kenneth OP |
9
kenneth OP |
10
kenneth OP @livid
@timonwong @LazyZhu 我想要http://10000000.42qu.com/这样的链接,不希望用http://42qu.com/user/10000000 所以应该不是用跳转吧。 |
11
LazyZhu 2012-12-06 16:14:47 +08:00 1
|
12
timonwong 2012-12-06 16:29:28 +08:00
|
13
kenneth OP @livid @LazyZhu @timonwong
还是不太明白 http://10000000.42qu.com/ 我的理解,应该是二级域名的 /根目录的请求 http://42qu.com/user/10000000 应该是 /user/([0-9]+)/来处理请求 而Tornado中没有区分二级域名的请求 application = tornado.web.Application([ (r"/", MainHandler), ],**settings @felinx这篇博客说这个问题,只是我还没理解。 http://feilong.me/2012/08/wildcard-subdomain-support-in-tornado |
14
timonwong 2012-12-06 16:50:51 +08:00
@kenneth
tornado处理的话 不需要管那里的正则,该怎么写怎么写 你只需要判断 request.host 是不是需要跳转的二级域名。 是的话就302 不是不管,交给get()/post()继续处理 最多只是个程序的结构问题,为了避免重复编码,可以做个BaseHandler基类或者MixIn, 在prepare()中,处理就可以了。 |
16
kenneth OP 等我想想怎么说清楚,我自己再试试先。
|
17
LazyZhu 2012-12-06 17:28:13 +08:00
写了个简单的示例,看看是不是你要的
server { server_name ~^(.+)\.byvee\.com$; set $subdomain $1; location / { rewrite_by_lua ' ngx.ctx.user = ngx.var.subdomain if ngx.ctx.user == "1" then ngx.ctx.user = lazyzhu local url = ngx.ctx.user .. ".byvee.com" return ngx.redirect("http://url/", 301) end '; content_by_lua ' local user = "user:" .. ngx.ctx.user ngx.say(user) '; } test: 1.byvee.com 2.byvee.com ..... |
19
kenneth OP @LazyZhu 谢谢你,我不会这种,我用self.request取subdomain,然后判断再跳转的方式实现了。
暂时先这样,只是不知道这种方法好不好。 |
20
2code 2012-12-06 18:42:00 +08:00
LS,我想你们想复杂了,我曾经在一个php的实际项目中使用的这样的泛域名的方式。
我当时的方法是: ngnix里: server_name site.com *.site.com; php里(我当时使用了一个类似于express的微框架) 写一个middleware,对所有访问过来的请求进行过滤,使用正则判断到泛域名的子域名部分,放在SESSION中,所有不同的子域名访问请求执行的其实是同一套代码,只是SESSION中有一个变量让所有的代码能区分对待不同的用户。 |
21
LazyZhu 2012-12-06 19:02:51 +08:00
|
23
felinx 2012-12-07 10:35:33 +08:00
呃,我的那条博客已经讲得很清楚了,你在仔细看看,还有poweredsites的源码吧!
|