2013-10-29 78 views
1

我有一个较旧的Express 2.5.9应用程序,我将其与Express 3.4.x进行了最新的更新。在生产中,应用程序被Apache使用重写规则代理:Express 3,Apache代理和basepath

RewriteRule ^/path/to/app/(.*)$ http://nodeserver.domain.com:3000/$1 [P,L] 
RewriteRule ^/path/to/app$ /path/to/app/ [R,L] 

因此,在生产,http://domain.com/path/to/app/foo被代理到http://nodeserver.domain.com:3000/foo和Express正常处理/富路线。

在快递2.x中,我用了basepath设置,以便重定向是在生产(如处理不当,如果我需要重定向到/login,该basepath设置,设置为/path/to/app实际上会重定向到/path/to/app/loginbasepath没有设置在发展(如访问在http://localhost:3000应用程序)。

basepath已经快3被去除,使得设置不再起作用,也不做我的重定向(例如,如果我去http://domain.com/path/to/app/admin,这条路有中间件重定向到/login,最终被重定向到http://domain.com/login)。

我可以从

res.redirect('/login') 

重新写我重定向到

var redirectUrl = config.basepath ? config.basepath + '/login' : '/login' 
res.redirect(redirectUrl) 

,但似乎不雅。

我已经考虑过安装方法,但对于这种情况似乎有点矫枉过正。

回答

1

根据the Express API doc你也许应该只是把

res.redirect('/login') 

res.redirect('login') 

,做安装的方法,因为这似乎是在做它,因为第3版。

的正确方法