Add legacy French URL redirects and fix header click-through bug

This commit is contained in:
Djeex
2026-08-30 16:46:28 +02:00
parent c51fcd5df6
commit ab8671e0fb
3 changed files with 53 additions and 4 deletions
+2 -2
View File
@@ -17,9 +17,9 @@ const navMenuVariants = useUIConfig('navigationMenu')
grid for the article body (right TOC sidebar = col-span-2 of that grid for the article body (right TOC sidebar = col-span-2 of that
inner grid). Matching both levels is what lines this menu up with inner grid). Matching both levels is what lines this menu up with
the real content column instead of a naive single-level fraction. --> the real content column instead of a naive single-level fraction. -->
<div class="grid grid-cols-10 gap-10 w-full pointer-events-auto"> <div class="grid grid-cols-10 gap-10 w-full">
<div class="col-span-8 col-start-3 grid grid-cols-10 gap-10"> <div class="col-span-8 col-start-3 grid grid-cols-10 gap-10">
<div class="col-span-8 col-start-1"> <div class="col-span-8 col-start-1 pointer-events-auto">
<UNavigationMenu <UNavigationMenu
:items="sections" :items="sections"
:highlight="navMenuVariants.highlight ?? true" :highlight="navMenuVariants.highlight ?? true"
+2 -2
View File
@@ -53,7 +53,7 @@ class: my-0!
ui: ui:
icon: text-[#1ad6ff] icon: text-[#1ad6ff]
--- ---
Consultez mes bêtises Jetez un oeil à mes âneries
::::: :::::
:::::card :::::card
@@ -64,7 +64,7 @@ to: https://lumeex.djeex.fr
target: _blank target: _blank
class: my-0! class: my-0!
--- ---
Un autre générateur de galerie photo statique, minimaliste et léger Un générateur de galerie photo statique, minimaliste et léger
::::: :::::
:::::card :::::card
+49
View File
@@ -60,4 +60,53 @@ export default defineNuxtConfig({
name: 'Français', name: 'Français',
}], }],
}, },
// Permanent (301) redirects from the old site's French URLs (root-level,
// no locale prefix) to their new /fr/... equivalents, so bookmarks and
// search engine rankings carry over.
routeRules: {
'/apropos/bienvenue': { redirect: { to: '/fr/about/welcome', statusCode: 301 } },
'/generalites/reseau/nat': { redirect: { to: '/fr/general/networking/nat', statusCode: 301 } },
'/generalites/reseau/dns': { redirect: { to: '/fr/general/networking/dns', statusCode: 301 } },
'/generalites/reseau/samba': { redirect: { to: '/fr/general/networking/samba', statusCode: 301 } },
'/generalites/stockage/raid': { redirect: { to: '/fr/general/storage/raid', statusCode: 301 } },
'/generalites/stockage/zfs': { redirect: { to: '/fr/general/storage/zfs', statusCode: 301 } },
'/generalites/hardware/bases': { redirect: { to: '/fr/general/hardware/basics', statusCode: 301 } },
'/generalites/hardware/reseau': { redirect: { to: '/fr/general/hardware/network', statusCode: 301 } },
'/generalites/hardware/prolonas': { redirect: { to: '/fr/general/hardware/prolonas', statusCode: 301 } },
'/serveex/introduction': { redirect: { to: '/fr/serveex/introduction', statusCode: 301 } },
'/serveex/coeur/installation': { redirect: { to: '/fr/serveex/core/installation', statusCode: 301 } },
'/serveex/coeur/docker': { redirect: { to: '/fr/serveex/core/docker', statusCode: 301 } },
'/serveex/coeur/swag': { redirect: { to: '/fr/serveex/core/swag', statusCode: 301 } },
'/serveex/securite/wireguard': { redirect: { to: '/fr/serveex/security/wireguard', statusCode: 301 } },
'/serveex/securite/authentik': { redirect: { to: '/fr/serveex/security/authentik', statusCode: 301 } },
'/serveex/securite/cloudflare': { redirect: { to: '/fr/serveex/security/cloudflare', statusCode: 301 } },
'/serveex/monitoring/uptime-kuma': { redirect: { to: '/fr/serveex/monitoring/uptime-kuma', statusCode: 301 } },
'/serveex/monitoring/dozzle': { redirect: { to: '/fr/serveex/monitoring/dozzle', statusCode: 301 } },
'/serveex/monitoring/speedtest-tracker': { redirect: { to: '/fr/serveex/monitoring/speedtest-tracker', statusCode: 301 } },
'/serveex/monitoring/beszel': { redirect: { to: '/fr/serveex/monitoring/beszel', statusCode: 301 } },
'/serveex/monitoring/upsnap': { redirect: { to: '/fr/serveex/monitoring/upsnap', statusCode: 301 } },
'/serveex/media/plex': { redirect: { to: '/fr/serveex/media/plex', statusCode: 301 } },
'/serveex/media/qbittorrent': { redirect: { to: '/fr/serveex/media/qbittorrent', statusCode: 301 } },
'/serveex/media/servarr': { redirect: { to: '/fr/serveex/media/servarr', statusCode: 301 } },
'/serveex/cloud/immich': { redirect: { to: '/fr/serveex/cloud/immich', statusCode: 301 } },
'/serveex/cloud/nextcloud': { redirect: { to: '/fr/serveex/cloud/nextcloud', statusCode: 301 } },
'/serveex/files/file-browser': { redirect: { to: '/fr/serveex/files/file-browser', statusCode: 301 } },
'/serveex/files/pingvin': { redirect: { to: '/fr/serveex/files/pingvin', statusCode: 301 } },
'/serveex/development/code-server': { redirect: { to: '/fr/serveex/development/code-server', statusCode: 301 } },
'/serveex/development/gitea': { redirect: { to: '/fr/serveex/development/gitea', statusCode: 301 } },
'/serveex/development/it-tools': { redirect: { to: '/fr/serveex/development/it-tools', statusCode: 301 } },
'/serveex/apps/adguard': { redirect: { to: '/fr/serveex/apps/adguard', statusCode: 301 } },
'/serveex/apps/vaultwarden': { redirect: { to: '/fr/serveex/apps/vaultwarden', statusCode: 301 } },
'/stockeex/introduction': { redirect: { to: '/fr/stockeex/introduction', statusCode: 301 } },
'/betises/python/nvidia-stock-bot': { redirect: { to: '/fr/nonsense/python/nvidia-stock-bot', statusCode: 301 } },
'/betises/python/adguard-cidre': { redirect: { to: '/fr/nonsense/python/adguard-cidre', statusCode: 301 } },
'/betises/python/lumeex': { redirect: { to: '/fr/nonsense/python/lumeex', statusCode: 301 } },
'/betises/python/instameex': { redirect: { to: '/fr/nonsense/python/instameex', statusCode: 301 } },
'/betises/bash/servarr-doublons': { redirect: { to: '/fr/nonsense/bash/servarr-duplicates', statusCode: 301 } },
'/betises/bash/luks-backup': { redirect: { to: '/fr/nonsense/bash/luks-backup', statusCode: 301 } },
'/betises/bash/socat-proxy': { redirect: { to: '/fr/nonsense/bash/socat-proxy', statusCode: 301 } },
'/betises/bash/hotdisk': { redirect: { to: '/fr/nonsense/bash/hotdisk', statusCode: 301 } },
'/betises/bash/backrest-docker-stop': { redirect: { to: '/fr/nonsense/bash/backrest-docker-stop', statusCode: 301 } },
'/Poubelle/obsolete/wireguard-14': { redirect: { to: '/fr/recycled/deprecated/wireguard-14', statusCode: 301 } },
},
}) })