Aller au contenu

phil/redirects-bundle

alpha

Des redirections pour Symfony, gérées depuis une administration et résolues seulement quand rien d'autre n'a répondu.

phil/redirects-bundle garde les redirections d'un site qui a déménagé : 301, 302, 307, 308 et 410 Gone, d'une source par chemin exact, par préfixe ou par joker, vers un chemin, une URL absolue permise ou une route. Il ne les résout que sur une 404 : une page qui existe ne paie ainsi jamais pour la table. Il associe aussi des domaines anciens entiers à un nouvel hôte avant le routage. Les boucles et les chaînes sont refusées à l'enregistrement d'une redirection, et aucune redirection ne quitte le site sauf si l'application a listé l'hôte. Les chemins introuvables sont journalisés par hôte et par chemin, sans aucune donnée sur le visiteur, et deviennent une redirection en un clic depuis l'administration. Les redirections entrent et sortent en CSV, depuis l'administration ou la console, et d'autres paquets fournissent les leurs par un fournisseur.

C'est la table des redirections de tout site dont les adresses changent : une nouvelle structure, une section fusionnée, un domaine abandonné.

État

PartieÉtat
Sources (exacte, préfixe, joker, expression régulière) et cibles (chemin, URL, route, disparue)Implémenté et testé
La table, son cache PSR-6 et le résolveur sur 404Implémenté et testé, banc d'essai sur 10 000 redirections
Les domaines anciens avant le routageImplémenté et testé
Boucles, chaînes et redirections ouvertes refusées à l'enregistrementImplémenté et testé
Le journal des 404, ses filtres et sa purgeImplémenté et testé
L'administration en Twig, en anglais et en français, et le menu EasyAdminImplémenté et testé
Import et export CSV, phil:redirects:import, export, check, purge-404Implémenté et testé
Fournisseurs pour les redirections d'autres paquetsImplémenté et testé

Documentation

DocumentContenu
InstallationPrérequis, enregistrement du bundle, les tables, les routes de l'administration.
ConfigurationChaque option de phil_redirects.
Sources et ciblesLes quatre genres de source, leur syntaxe bornée, les cibles et leurs paramètres substituables.
RésolutionQuand une redirection répond, dans quel ordre, sa priorité après les routes d'autres paquets, le cache.
Domaines anciensUn domaine associé à un nouvel hôte avant le routage.
SécuritéBoucles et chaînes, redirections ouvertes, expressions régulières, les bornes de chaque entrée.
Le journal des 404Ce qui est gardé et ce qui ne l'est pas, les filtres, le verdict de robot, la purge.
AdministrationLes pages, le rôle, le jeton CSRF, la mise en page, EasyAdmin.
Import, export et commandesLe format CSV et les quatre commandes.
Points d'extensionFournisseurs, filtres, dépôts et options que l'application choisit ou remplace.
TestsLes tests, le seuil de mutation, la cible de fuzzing et le banc d'essai.
RéférenceChaque type du bundle, avec son rôle.

Démarrage rapide

composer require phil/redirects-bundle
# config/packages/phil_redirects.yaml
phil_redirects:
    allowed_hosts: [shop.example.com]
    cache: { pool: cache.app }
    old_domains:
        old-example.com: { host: www.example.com }
    admin: { enabled: true, role: ROLE_EDITOR }
# config/routes/phil_redirects.yaml
phil_redirects_admin:
    resource: '@PhilRedirectsBundle/config/routes/admin.php'
    prefix: /admin/redirects
use Phil\RedirectsBundle\Application\Redirects;
use Phil\RedirectsBundle\Domain\ValueObject\RedirectRule;
use Phil\RedirectsBundle\Domain\ValueObject\SourcePattern;
use Phil\RedirectsBundle\Domain\ValueObject\Target;

$redirects->create(new RedirectRule(SourcePattern::wildcard('/blog/*/**'), Target::url('/articles/$1')));

Prérequis

PHP 8.5 ou plus récent, Symfony 8.2 ou plus récent, Doctrine DBAL 4.5 ou plus récent et phil/url 0.1.3, qui requiert les extensions intl, mbstring et URI. La console, Twig, la sécurité, le traducteur, un pool PSR-6, EasyAdmin et phil/bot-detection-bundle sont facultatifs.

Contribuer

Les contributions sont les bienvenues sur le monodépôt PHIL : lisez le guide de contribution et le code de conduite. Signalez une vulnérabilité en privé, comme l'explique la politique de sécurité, jamais dans un ticket public.

Licence

MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Parler Haut Interagir Librement project. Voir LICENSE.