最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Express抛出404是否在URL中有点

运维笔记admin14浏览0评论

Express抛出404是否在URL中有点

Express抛出404是否在URL中有点

假设我有一个由npm run dev commend(标准,官方样板)运行的Vue2应用程序。我正在使用vue-router通过应用程序提供路由。

我有一些来自搜索引擎的遗留网址,其中包含我的应用程序旧版本的地址,例如/foo,123,bar,456,baz.html

我必须支持这些类型的链接。我是在Vue那边做的(路径如:/foo,:foo,bar,:bar,baz.html

但我遇到了问题 - Express服务器返回404 - 无法获取/foo,123,bar,456.baz.html

我做了一些挖掘,我发现了一些解决方案,比如将连接重写添加到连接历史记录api-fallback

rewrites: [
  {
    from: /^\/.*$/,
    to: function(ctx) {
      return ctx.parsedUrl.pathname.replace('.html', '');
    }
  }
],

它有帮助...但没有解决问题......

将GET /foo,123,bar,456,baz.html重写为/ foo,123,bar,456,baz

但...

Express仍尝试查看/foo,123,bar,456,baz.html并返回404。

有任何想法吗?

回答如下:

免责声明:这不是我的专业领域,因此无法保证这个答案的效果如何。

在服务器文件的顶部,尝试放置一个将重定向到正确URL的请求处理程序。更具体地说,首先是app.use的所有其他实例,放一个这样的处理程序:

app.use((req, res, next) => {
  var url = new URL(req.protocol + '://' + req.get('host') + req.originalUrl);
  // "get full URL" code from https://stackoverflow/a/10185427/2846923
  if (url.pathname.endsWith('.html') /* or whatever other condition fits your needs */) {
    url.pathname = url.pathname.slice(0, -5);
    res.redirect(301, url.href)
  } else {
    next();
  }
});

这将...

  1. 拦截所有请求。
  2. 如果它与您的旧网址匹配,请重定向到新网址。
  3. 如果不匹配,请继续,就好像我们从未截获该请求一样。

这样做的好处是搜索引擎最终应该流行起来,并列出新的URL代替旧的URL。在将来的某个时刻,对旧URL的所有引用都将不复存在。此时,您将能够删除重定向处理程序,除了手动硬编码链接到旧URL之外,几乎没有负面影响。

发布评论

评论列表(0)

  1. 暂无评论