Я использую vue-router в многостраничном приложении; мы добавляем режим истории, потому что наши требования настаивают на том, чтобы наши URL-адреса не содержали специальных символов (#), и хотим убедиться, что из нашего кода внешнего интерфейса мы всегда добавляем наши клиентские маршруты с /v/
. (чтобы избежать необходимости обновлять все наши маршруты во всем приложении и централизовать эту функцию).
Я хочу добавить маршрут, похожий на:
routes: [
// add 'v/' to paths that don't start with 'v/'
{
path: '(^\/(?!v))*',
redirect: to => '/v/${to}'
},
]
Основанный на использовании регулярных выражений внутри path-to-regexp, но я не совсем ясно из их документации, как правильно передать весь маршрут как регулярное выражение (или это возможно?), Особенно без попадания в цикл перенаправления.
Я смог использовать 2 перенаправления, чтобы добиться того, что мне было нужно (в данном случае откат до "/" как 404.
// Fallback to baseRoute for prefixed unmatched routes
{ path: '${prefix}/*', redirect: '/' },
// Fallback to baseRoute for unprefixed, unmatched routes (try again with prefix)
{ path: '*', redirect: to => prefix + to.path }
(Интересно, что в функции перенаправления значение to
остается неизменным, если вы перенаправлены, поэтому у меня изначально был бесконечный цикл. to => to.path.startsWith(prefix)? '/': prefix + to.path
)