我是使用ExpressJS服务器进行SPA标准化/规范化URL的后。ExpressJS路由器标准化/规范URL
虽然它是由服务器端路由器备份的SPA - 模板可能与应用程序URL有所不同。其中一个差异是<link rel="canonical" href="https://example.com{{ originalPath }}">
标记。不是相关的细节,但解释了问题的背景。我预计只有一个网址会以200响应,其变体会被重定向到301/302(适用于人类和搜索引擎)。
我想让url大小写敏感和严格(没有额外的斜杠),类似于Router
选项,但非规范的url(大小写或额外斜线不同)应该做301/302重定向到规范url而不是404。
在大多数应用程序中,我只是想强制*
路径的URL以较小的值(除查询外),没有额外的斜线。即app.all('*', ...)
和重定向是:
/Foo/Bar/ -> /foo/bar
/foo/Bar?Baz -> /foo/bar?Baz
但也有例外,如果路线明确定义。例如,有骆驼外装路线:
possiblyNestedRouter.route('/somePath')...
possiblyNestedRouter.route('/anotherPath/:Param')...
和所有非规范网址应重定向到规范(参数情况下保持完整):
/somepath/ -> /somePath
/anotherpath/FOO -> /anotherPath/FOO
规范网址背后的逻辑是很直截了当,所以很奇怪我在ExpressJS这个主题上找不到任何东西。
这样做的最好方法是什么?中间件已经可以提供帮助吗?
但是,非GET请求呢?那么区分大小写的路由如'somePath'呢?它们可以是挂载路线,即路线段不会是在URL中初始'/'后的第一个路段。 – estus
这将获得所有路由类型,但是您只能对GET请求执行重定向并保留所有内容。如果你想尝试做一些更智能的匹配(在第一行插入区分大小写后),你可以使用app._router.stack列出所有的路由,并尝试找到区分大小写的部分 –