Express 3.4.x で最新の状態にする古い Express 2.5.9 アプリがあります。本番環境では、アプリは RewriteRule を使用して Apache によってプロキシされます。
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 は通常どおり /foo ルートを処理します。
Express 2.x では、このbasepath
設定を使用して、本番環境でリダイレクトが適切に処理されるようにしました (たとえば、にリダイレクトする必要がある場合/login
、basepath
設定を に設定する/path/to/app
と、実際には にリダイレクトされ/path/to/app/login
ます。basepath
開発では設定されませんでした (たとえば、でアプリにアクセスするhttp://localhost:3000
)。
basepath
は Express 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)
しかし、それはエレガントではないようです。
取り付け方法を検討しましたが、このシナリオでは少しやり過ぎのようです。