2013-10-29 34 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版。

的正確方法