Express 3,Apache代理和basepath
我有一个较旧的Express 2.5.9应用程序,我正在使用Express 3.4.x进行最新的操作。 在生产中,应用程序由Apache使用RewriteRule代理:
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
://domain.com/path/to/app/foo被代理到http://nodeserver.domain.com:3000/foo
,而Express则正常处理/ foo路由。
在Express 2.x中,我使用了basepath
设置,以便在生产环境中正确处理redirect(例如,如果我需要redirect到/login
, basepath
设置,设置为/path/to/app
将实际redirect到/path/to/app/login
。在开发中没有设置basepath
(例如,在http://localhost:3000
访问应用程序)。
在Express 3中已经删除了basepath
,所以设置不再起作用,我的redirect也没有(例如,如果我去http://domain.com/path/to/app/admin
,该路由有中间件redirect到/login
,最终被redirect到http://domain.com/login
)。
我可以重写我的redirect
res.redirect('/login')
至
var redirectUrl = config.basepath ? config.basepath + '/login' : '/login' res.redirect(redirectUrl)
但这似乎不雅。
我已经考虑过安装方法,但是对于这种情况似乎有些矫枉过正。
根据Express API文档,您应该转向
res.redirect('/login')
至
res.redirect('login')
并采取挂载方式,因为这似乎是从第3版开始的正确方法。