Express arroja 404 si tiene un punto en url – Vue, webpack

digamos que tengo una aplicación Vue2 ejecutada por npm run dev commend (estándar, estándar). Estoy usando vue-router para proporcionar enrutamiento a través de la aplicación.

Tengo algunas direcciones URL heredadas de los motores de búsqueda que contienen direcciones a la versión anterior de mi aplicación, por ejemplo, / foo123, barra,456,baz.html

Tengo que apoyar ese tipo de enlaces. Lo hice en el lado de Vue (ruta como: /foo,:foo,bar,:bar,baz.html

pero tengo problemas – Express Server devuelve 404No se puede obtener /foo123, barra,456.baz.html

Hice algunas excavaciones y encontré algunas soluciones como agregar reescrituras a connect-history-api-fallback

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

ayuda … pero no resuelve el problema …

Reescribiendo GET / foo123, barra,456, baz.html a / foo, 123, bar, 456, baz

pero…

Express todavía trata de revisar /foo123, barra,456, baz.html y devuelve 404.

¿Algunas ideas?

Descargo de responsabilidad: esta no es mi área de experiencia, por lo que no hay garantías sobre qué tan bien funcionará esta respuesta.

En la parte superior del archivo del servidor, intente colocar un controlador de solicitudes que redirija a la URL correcta. Más específicamente, sobre todas las demás instancias de app.use , ponga un controlador como este:

 app.use((req, res, next) => { var url = new URL(req.protocol + '://' + req.get('host') + req.originalUrl); // "get full URL" code from https://stackoverflow.com/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(); } }); 

Esta voluntad…

  1. Interceptar todas las solicitudes.
  2. Si coincide con su URL heredada, redirija a la nueva URL.
  3. Si no coincide, continúe como si nunca hubiéramos interceptado esa solicitud.

Esto tiene la ventaja de que los motores de búsqueda eventualmente se pondrán al día y enumerarán la nueva URL en lugar de la anterior. En algún momento en el futuro, todas las referencias a la URL antigua ya no existirán. En ese momento, podrá eliminar el controlador de redirección con pocas o ninguna consecuencia negativa, además de romper los enlaces codificados manualmente a las URL heredadas.