我有一个非常简单的应用程序,总是会使用以下URL结构访问:www.myapplication.com/some/deep/nested/1234567890/
1234567890是用户的帐号,每个用户可以有不同的帐号。目前,如果最终的尾部反斜杠保持不变,则无法访问该应用:www.myapplication.com/some/deep/nested/1234567890
事实上,如果通过以下方式访问应用,则网址会发生变化:www.myapplication.com/1234567890
在我的app.js中给出以下内容:
app.use('/', api);
app.use('/:user', express.static(path.join(__dirname, 'dist')));
其中api是一个简单的快速路由器本身,我的React应用程序使用jQuery使用req.params中的用户编号调用,如何使用尾部反斜杠来访问应用程序?
我尝试了各种方法,例如:
app.use('/:user/?', express.static(path.join(__dirname, 'dist')));
或
app.use(express.static(path.join(__dirname, 'dist')));
后者会阻止网址被截断,但只能在没有用户帐号的情况下运行,这显然是必要的:www.myapplication.com/some/deep/nested/
如果我转到www.myapplication.com/some/deep/nested/1234567890
或www.myapplication.com/some/deep/nested/1234567890/
网址未被截断,但我得到Cannot GET /1234567890
或Cannot GET /1234567890/
。
我也试过改变这些职位无济于事:
app.use('/:user', express.static(path.join(__dirname, 'dist')));
app.use('/', api);
答案 0 :(得分:0)
我使用express-slash。这是一个简单的中间件,当它不存在时附加一个尾部斜杠。然后,您只需要处理包含尾部斜杠的路径。这可以说是可取的,因为www.myapplication.com/some/deep/nested/1234567890
和www.myapplication.com/some/deep/nested/1234567890/
是不同的路径,并且对两者呈现相同的响应并不理想(就SEO而言,最有针对性)。
答案 1 :(得分:0)
好吧,我想出了一个hacky,解决方法来做这个非常特定于我的情况,并且在大多数情况下不会工作。我会在这里发布,以便其他人可以改进答案。我添加了以下中间件:
app.use('/', api);
app.use(function(req, res, next) {
if(req.url.substr(-1) !== '/' && req.url.length > 1 && req.url.substr(-3) !== 'css' && req.url.substr(-2) !== 'js'){
res.redirect(301, '/some/deep/nested' + req.url + '/');
}else{
next();
}
});
app.use('/:user', express.static(path.join(__dirname, 'dist')));
if语句检查css和js文件,并防止反斜杠被添加到它们中(在添加这些检查之前我遇到的一个问题)。
同样,这适用于我所面临的具体情况,但我希望有一些更好的答案潜伏在那里。