Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 53 additions & 41 deletions packages/docs/public/_redirects
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# https://developers.cloudflare.com/pages/configuration/redirects/

# Keep in sync with `src/routes/plugin@redirects.ts`

# Discord

/chat https://discord.gg/TsNCMd6uGW 307
/chat/ https://discord.gg/TsNCMd6uGW 307

# Cute redirects

/examples /examples/introduction/hello-world/ 307
/examples/ /examples/introduction/hello-world/ 307
/guide /docs/ 307
Expand All @@ -10,63 +18,67 @@
/tutorials /tutorial/welcome/overview/ 307
/tutorials/ /tutorial/welcome/overview/ 307

/tutorial/hooks/use-client-effect/ /tutorial/hooks/use-browser-visible-task/ 307
# Old URLs

/qwikcity/routing/pathless/ /docs/layout/grouped/ 308
/tutorial/hooks/use-client-effect/ /tutorial/hooks/use-visible-task/ 308

/qwikcity/middleware/azure-swa/ /deployments/azure-swa/ 308
/qwikcity/middleware/cloudflare-pages/ /deployments/cloudflare-pages/ 308
/qwikcity/middleware/netlify-edge/ /deployments/netlify-edge/ 308
/qwikcity/middleware/node/ /deployments/node/ 308
/qwikcity/middleware/express/ /deployments/node/ 308
/integrations/deployments/azure-swa/ /deployments/azure-swa/ 308
/integrations/deployments/cloudflare-pages/ /deployments/cloudflare-pages/ 308
/integrations/deployments/netlify-edge/ /deployments/netlify-edge/ 308
/integrations/deployments/express/ /deployments/express/ 308
/integrations/deployments/netlify-edge/ /deployments/netlify-edge/ 308
/integrations/deployments/vercel-edge/ /deployments/vercel-edge/ 308

/qwikcity/directory-layout/ /docs/project-structure/ 308
/qwikcity/static-assets/ /docs/advanced/static-assets/ 308
/qwikcity/routing/overview/ /docs/routing/ 308
/qwikcity/routing/route-parameters/ /docs/routing/ 308
/qwikcity/routing/error-responses/ /docs/advanced/routing/ 308
/qwikcity/loader/ /docs/route-loader/ 308
/qwikcity/layout/overview/ /docs/layout/ 308
/qwikcity/layout/nested/ /docs/advanced/routing/ 308
/qwikcity/layout/grouped/ /docs/advanced/routing/ 308
/qwikcity/layout/named/ /docs/advanced/routing/ 308
/qwikcity/data/overview/ /docs/routing/ 308
/qwikcity/data/retrieve/ /docs/routing/ 308
/qwikcity/data/modify/ /docs/endpoints/ 308
/qwikcity/data/endpoints/ /docs/endpoints/ 308
/qwikcity/data/redirects/ /docs/guides/redirects/ 308
/qwikcity/advanced/prefetching/ /docs/advanced/modules-prefetching/
/qwikcity/content/component/ /docs/pages/ 308
/qwikcity/content/head/ /docs/pages/ 308
/qwikcity/content/mdx/ /docs/guides/mdx/ 308
/qwikcity/content/menu/ /docs/advanced/menu/ 308
/qwikcity/content/head/ /docs/pages/ 308
/qwikcity/static-site-generation/overview/ /docs/guides/static-site-generation/ 308
/qwikcity/static-site-generation/static-site-config/ /docs/guides/static-site-generation/ 308
/qwikcity/static-site-generation/dynamic-routes/ /docs/guides/static-site-generation/ 308
/qwikcity/advanced/prefetching/ /docs/advanced/modules-prefetching/
/qwikcity/data/endpoints/ /docs/endpoints/ 308
/qwikcity/data/modify/ /docs/endpoints/ 308
/qwikcity/data/overview/ /docs/routing/ 308
/qwikcity/data/redirects/ /docs/guides/redirects/ 308
/qwikcity/data/retrieve/ /docs/routing/ 308
/qwikcity/directory-layout/ /docs/project-structure/ 308
/qwikcity/layout/grouped/ /docs/advanced/routing/ 308
/qwikcity/layout/named/ /docs/advanced/routing/ 308
/qwikcity/layout/nested/ /docs/advanced/routing/ 308
/qwikcity/layout/overview/ /docs/layout/ 308
/qwikcity/loader/ /docs/route-loader/ 308
/qwikcity/middleware/azure-swa/ /deployments/azure-swa/ 308
/qwikcity/middleware/cloudflare-pages/ /deployments/cloudflare-pages/ 308
/qwikcity/middleware/express/ /deployments/node/ 308
/qwikcity/middleware/netlify-edge/ /deployments/netlify-edge/ 308
/qwikcity/middleware/node/ /deployments/node/ 308
/qwikcity/prefetching/overview/ /docs/advanced/speculative-module-fetching/ 308
/qwikcity/prefetching/service-worker-prefetching/ /docs/advanced/speculative-module-fetching/ 308
/qwikcity/prefetching/request-response-cache/ /docs/advanced/speculative-module-fetching/ 308
/qwikcity/prefetching/parallelizing-network-requests/ /docs/advanced/speculative-module-fetching/ 308
/docs/overview /docs/ 308
/docs/overview/ /docs/ 308
/docs/cheat/qwik-react/ /docs/integrations/react/ 308
/qwikcity/prefetching/request-response-cache/ /docs/advanced/speculative-module-fetching/ 308
/qwikcity/prefetching/service-worker-prefetching/ /docs/advanced/speculative-module-fetching/ 308
/qwikcity/routing/error-responses/ /docs/advanced/routing/ 308
/qwikcity/routing/overview/ /docs/routing/ 308
/qwikcity/routing/pathless/ /docs/layout/grouped/ 308
/qwikcity/routing/route-parameters/ /docs/routing/ 308
/qwikcity/static-assets/ /docs/advanced/static-assets/ 308
/qwikcity/static-site-generation/dynamic-routes/ /docs/guides/static-site-generation/ 308
/qwikcity/static-site-generation/overview/ /docs/guides/static-site-generation/ 308
/qwikcity/static-site-generation/static-site-config/ /docs/guides/static-site-generation/ 308

/docs/advanced/i18n/ /docs/integrations/i18n/ 308
/docs/cheat/best-practices/ /docs/guides/best-practices/ 308
/docs/cheat/qwik-react/ /docs/integrations/react/ 308
/docs/cheat/serialization/ /docs/guides/serialization/ 308
/docs/components/inline-components/ /docs/core/overview/ 308
/docs/components/lifecycle/ /docs/core/tasks/ 308
/docs/components/projection/ /docs/core/slots/ 308
/docs/components/resource/ /docs/core/state/ 308
/docs/cookbook/re-exporting-loaders/ /docs/re-exporting-loaders/ 308

/qwikcity/* /docs/:splat 308
/integrations/* /docs/integrations/:splat 308
/deployments/* /docs/deployments/:splat 308
/docs/advanced/i18n/ /docs/integrations/i18n/ 308
/docs/components/inline-components/ /docs/core/overview/ 308
/docs/think-qwik/ /docs/concepts/think-qwik/ 308
/docs/env-variables/ /docs/guides/env-variables/ 308
/docs/components/* /docs/core/:splat 308
/docs/overview /docs/ 308
/docs/overview/ /docs/ 308
/docs/think-qwik/ /docs/concepts/think-qwik/ 308

# All wildcards (and only wildcards) must be below here

/deployments/_ /docs/deployments/:splat 308
/docs/components/_ /docs/core/:splat 308
/integrations/_ /docs/integrations/:splat 308
/qwikcity/_ /docs/:splat 308
98 changes: 98 additions & 0 deletions packages/docs/src/routes/plugin@redirects.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import type { RequestEvent } from '@builder.io/qwik-city';

// Keep in sync with `public/_redirects`

export const onGet = ({ url, redirect }: RequestEvent) => {
const { pathname } = url;
const tempRedirect = tempRedirects[pathname];
if (tempRedirect) {
throw redirect(307, tempRedirect);
}
const redirectUrl = redirects[pathname];
if (redirectUrl) {
throw redirect(308, redirectUrl);
}
const rewritePrefix = (path: string, replacement: string) => {
if (pathname.startsWith(path)) {
throw redirect(308, pathname.replace(path, replacement));
}
};
rewritePrefix('/docs/components/', '/docs/core/');
rewritePrefix('/deployments/', '/docs/deployments/');
rewritePrefix('/integrations/', '/docs/integrations/');
rewritePrefix('/qwikcity/', '/docs/');
};

const tempRedirects: Record<string, string> = {
'/chat': ' https://discord.gg/TsNCMd6uGW',
'/chat/': ' https://discord.gg/TsNCMd6uGW',

'/examples ': '/examples/introduction/hello-world/',
'/examples/ ': '/examples/introduction/hello-world/',
'/guide ': '/docs/',
'/guide/ ': '/docs/',
'/tutorial ': '/tutorial/welcome/overview/',
'/tutorial/ ': '/tutorial/welcome/overview/',
'/tutorials ': '/tutorial/welcome/overview/',
'/tutorials/ ': '/tutorial/welcome/overview/',
};

const redirects: Record<string, string> = {
'/tutorial/hooks/use-client-effect/': '/tutorial/hooks/use-visible-task/',

'/integrations/deployments/azure-swa/': '/deployments/azure-swa/',
'/integrations/deployments/cloudflare-pages/': '/deployments/cloudflare-pages/',
'/integrations/deployments/express/': '/deployments/express/',
'/integrations/deployments/netlify-edge/': '/deployments/netlify-edge/',
'/integrations/deployments/vercel-edge/': '/deployments/vercel-edge/',

'/qwikcity/advanced/prefetching/': '/docs/advanced/modules-prefetching/',
'/qwikcity/content/component/': '/docs/pages/',
'/qwikcity/content/head/': '/docs/pages/',
'/qwikcity/content/mdx/': '/docs/guides/mdx/',
'/qwikcity/content/menu/': '/docs/advanced/menu/',
'/qwikcity/data/endpoints/': '/docs/endpoints/',
'/qwikcity/data/modify/': '/docs/endpoints/',
'/qwikcity/data/overview/': '/docs/routing/',
'/qwikcity/data/redirects/': '/docs/guides/redirects/',
'/qwikcity/data/retrieve/': '/docs/routing/',
'/qwikcity/directory-layout/': '/docs/project-structure/',
'/qwikcity/layout/grouped/': '/docs/advanced/routing/',
'/qwikcity/layout/named/': '/docs/advanced/routing/',
'/qwikcity/layout/nested/': '/docs/advanced/routing/',
'/qwikcity/layout/overview/': '/docs/layout/',
'/qwikcity/loader/': '/docs/route-loader/',
'/qwikcity/middleware/azure-swa/': '/deployments/azure-swa/',
'/qwikcity/middleware/cloudflare-pages/': '/deployments/cloudflare-pages/',
'/qwikcity/middleware/express/': '/deployments/node/',
'/qwikcity/middleware/netlify-edge/': '/deployments/netlify-edge/',
'/qwikcity/middleware/node/': '/deployments/node/',
'/qwikcity/prefetching/overview/': '/docs/advanced/speculative-module-fetching/',
'/qwikcity/prefetching/parallelizing-network-requests/':
'/docs/advanced/speculative-module-fetching/',
'/qwikcity/prefetching/request-response-cache/': '/docs/advanced/speculative-module-fetching/',
'/qwikcity/prefetching/service-worker-prefetching/':
'/docs/advanced/speculative-module-fetching/',
'/qwikcity/routing/error-responses/': '/docs/advanced/routing/',
'/qwikcity/routing/overview/': '/docs/routing/',
'/qwikcity/routing/pathless/': '/docs/layout/grouped/',
'/qwikcity/routing/route-parameters/': '/docs/routing/',
'/qwikcity/static-assets/': '/docs/advanced/static-assets/',
'/qwikcity/static-site-generation/dynamic-routes/': '/docs/guides/static-site-generation/',
'/qwikcity/static-site-generation/overview/': '/docs/guides/static-site-generation/',
'/qwikcity/static-site-generation/static-site-config/': '/docs/guides/static-site-generation/',

'/docs/advanced/i18n/': '/docs/integrations/i18n/',
'/docs/cheat/best-practices/': '/docs/guides/best-practices/',
'/docs/cheat/qwik-react/': '/docs/integrations/react/',
'/docs/cheat/serialization/': '/docs/guides/serialization/',
'/docs/components/inline-components/': '/docs/core/overview/',
'/docs/components/lifecycle/': '/docs/core/tasks/',
'/docs/components/projection/': '/docs/core/slots/',
'/docs/components/resource/': '/docs/core/state/',
'/docs/cookbook/re-exporting-loaders/': '/docs/re-exporting-loaders/',
'/docs/env-variables/': '/docs/guides/env-variables/',
'/docs/overview': '/docs/',
'/docs/overview/': '/docs/',
'/docs/think-qwik/': '/docs/concepts/think-qwik/',
};