Forum Programmation.web Redirection Apache - ajouter une extension si besoin

Posté par  .
Étiquettes : aucune
0
13
mar.
2009
Bonjour,

J'ai archivé un site web obsolète grâce à wget et httrack. Je souhaite continuer à offrir à la consultation la version statique archivée. Les URL sont les mêmes, au détail près que les pages ont à présent une extension .html

Je bloque sur l'expression à ajouter au .htaccess pour rediriger les URL sans extension vers les pages actuelles. Concrètement :
http://mondomaine.tld/Mapage serait redirigé vers http://mondomaine.tld/Mapage.html
Mais si on tape directement http://mondomaine.tld/Mapage.html, l'adresse ne serait pas redirigée

Ma commande qui ne fonctionne pas :
RedirectMatch 301 /([^\.(html)+])$ /$1.html

Comme difficulté supplémentaire, les URL d'origine contenaient des majuscules, des caractères accentués et de la ponctuation (tirets, points d'exclamation, etc)

Qu'est-ce qui ne va pas dans ma regex ?
  • # plop

    Posté par  . Évalué à 1.

    si tu enlève les parenthèses autour de "html" et le+ qui les suit ca ne fonctionne pas ?

    • [^] # Re: plop

      Posté par  . Évalué à 1.

      Malheureusement non.
      RedirectMatch 301 /([^\.html+])$ /$1.html
      RedirectMatch 301 /[^\.(html)+]$ /$1.html
      RedirectMatch 301 /([^\.html])$ /$1.html

      ...ou autres combinaisons avec/sans parenthèses/crochets/+ ne fonctionnent pas.
  • # Mauvaise regex

    Posté par  (site web personnel) . Évalué à 3.

    Je lis ta regex :
    - rediriger toutes les url qui ne se terminent pas par . ou ( ou h ou t ou m ou l ou ) vers $1.html

    Ton problème est de faire une regex négative alors qu'apache ne te le permet pas d'office. Il va falloir ruser avec les options avancées de pcre, par exemple avec un negative look-(behind|ahead)

    Tester quelque chose comme

    (.*)(?!\.html)$

    Ou ceci qui marche mais qui ne sort pas de $1

    (?<!\.html)$
    • [^] # Re: Mauvaise regex

      Posté par  . Évalué à 1.

      Merci pour ta réponse. En effet, par réflexe j'ai utilisé une regex négative.

      Par contre, pour les deux regex, soit j'obtiens une boucle infinie (le .html est ajouté un nombre infini de fois au nom de fichier), soit une variable vide (je suis redirigé vers mondomaine.tld/.html), soit une erreur 500... Je suis perplexe.
      • [^] # Re: Mauvaise regex

        Posté par  (site web personnel) . Évalué à 2.

        Le nombre infini de fois montre que la première regex ne marche Pas.

        La variable vide c'est normal je l'ai indiqué $1 n'est pas rempli
        préfixer la 2e regex par un (.*) peut t'aider, mais je ne
        garantis pas :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.