Forum Linux.général Comment faire une redirection avec htaccess ?

Posté par  .
Étiquettes : aucune
0
3
août
2008
Bonjour,

Je souhaite arriver à faire des redirections avec htaccess mais je n'y arrive pas du tout. Pouvez vous m'aider à obtenir les 3 redirections suivantes ?

1 - Passer de http://www.NDD.org/article.php3?id_article=1234 à http://www.NDD.org/node/1234

2 - http://www.NDD.org/spip.php?article1234 -> http://www.NDD/node/1234

3 - 60gp.ovh.net/~NDD/spip.php?article1234 -> http://www.NDD.org/spip.php?article1234 ou vers http://www.NDD.org/node/1234

Je crois qu'il n'y a rien de plus compliqué que les redirections Apache alors si une âme charitable passe par là je lui en serai fort reconnaissant.

Merci
  • # url rewriting ?

    Posté par  . Évalué à 3.

    Salut
    C'est pas plutôt de l'url rewriting ?
    • [^] # Re: url rewriting ?

      Posté par  . Évalué à 1.

      oui, peut-être...
      • [^] # Re: url rewriting ?

        Posté par  . Évalué à 2.

        aller on t'aide.
        Attention c'est compliqué, il faut bien suivre les etapes pour ne pas se tromper

        1°) ouvrir ton navigateur
        2°) taper l'adresse http://www.google.fr
        3°) demander les mots url rewriting et valider
        4°) aller lire le premier resultat, ou le 4e

        http://www.webrankinfo.com/analyses/autres/url-rewriting-deb(...)
        http://www.vulgarisation-informatique.com/url-rewriting.php

        remarque : tu aurais gagné au moins 2h en allant sur google avant de poser ta question sur le forum
        • [^] # Re: url rewriting ?

          Posté par  . Évalué à 1.

          Merci pour cette délicate attention. Néanmoins, si je pose ma question sur un forum d'entraide c'est justement parce que je n'ai pas réussi à obtenir un résultat satisfaisant après avoir effectué toutes les recherches.

          Dans le 2ème lien que tu cites ils indiquent :
          Voici un exemple de syntaxe d'un fichier .htacess destiné à transformer l'url article-5.php en son url exacte article.php?id=5.
          On peut aussi rediriger toutes les url de la forme article-X.php ou X est un nombre en faisant ceci :

          Options +FollowSymlinks
          RewriteEngine On
          RewriteRule ^article-([0-9]*)\.php$ /article.php?id=$1 [L]



          mais lorsque je fait ce qui est indiqué il ne se passe rien. Pourtant l'url rewriting est bien pris en compte puisque avec des règles différentes l'adresse change.

          Options +FollowSymlinks
          RewriteEngine On
          RewriteRule ^id_article=([0-9]+)$ /node/$1 [L,R=302]


          Est ce que vous pouvez m'aider un peu plus qu'en me donnant des liens ?

          Merci
  • # URL rewriting

    Posté par  . Évalué à 3.

    salut dark_moule,

    en supposant que tu tournes avec un serveur apache, sous linux, la première chose à faire, c'est de charger le module d'apache qui permet de faire de la réécriture d'url (url rewriting).

    Pour charger un module dans apache : a2enmod, et le module s'appelle mod_rewrite.

    Ensuite, comme tu as trouvé dans tes recherches, il faut utiliser un fichier .htaccess.
    Commence par le créer à la racine de ton site.

    Dans le fichier, ajoute ces trois directives :

    AddDefaultCharset UTF-8
    Options +FollowSymlinks
    RewriteEngine on


    Ensuite, il faut écrire des règles de réécriture.

    Contrairement à ce qu'on pourrait croire avant de commencer, une règle ne sert pas à transformer machin=truc&bidule=chouette en machin/truc/bidule/chouette, mais l'opération inverse !
    En effet, dans le code HTML de ton site, tu indiques des adresses de la deuxième forme, et ce sont les fameuses règles de réécriture qui vont les convertir en des adresses compréhensibles par PHP (donc de la première forme).

    Au passage, il faut connaître les bases des expressions régulières pour comprendre la réécriture d'url (Google est ton ami)

    Voici un exemple de règle :

    RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ /index.php?module=$1&action=$2&id=$3 [L]

    Cette règle permet de transformer par exemple :

    /articles/lire/14 en index.php?module=article&action=lire&id=14

    L'option [L] indique à apache de ne pas examiner les règles suivantes si l'adresse à convertir correspond à la règle en question. Par exemple :

    RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ /index.php?module=$1&action=$2&id=$3 [L]
    RewriteRule ^([a-z]+)/([a-z]+)$ /index.php?module=$1&action=$2 [L]
    RewriteRule ^([a-z]+)$ /index.php?module=$1 [L]


    Ces trois règles permettent de convertir respectivement les url suivantes :

    /articles/lire/14 en index.php?module=articles&action=lire&id=14
    /articles/lister en index.php?module=articles&action=lister
    /articles en index.php?module=articles

    La directive [L] empêche qu'une url compatible avec la première règle soit "cassée" par la deuxième ou la troisième règle.
    • [^] # Re: URL rewriting

      Posté par  . Évalué à 2.

      Au passage, un bon tuto trouvé sur le net :

      http://apache.developpez.com/cours/urlrewriting/
    • [^] # Re: URL rewriting

      Posté par  . Évalué à 2.


      Contrairement à ce qu'on pourrait croire avant de commencer, une règle ne sert pas à transformer machin=truc&bidule=chouette en machin/truc/bidule/chouette, mais l'opération inverse !


      Tu es sûr ? J'ai changé de CMS et des liens qui étaient sous la première forme ne sont plus accessibles c'est pourquoi j'aimerai qu'apache les reecrives quand il les reçoit plutôt que de me dire "page introuvable"

      Autrement j'ai fait tout ce que tu indiques et cela fonctionne. Le problème est que je n'arrive pas à utiliser les expressions régulières pour les adapter à ma situation, d'où ma demande d'aide. Ce n'est pas quelque chose de facile ni de compréhensible contrairement à ce que certains ont l'air de penser.

      Si j'avais réussi tout seul il y a bien longtemps que je l'aurai déjà fait et je ne vous aurez pas dérangés.
      • [^] # Re: URL rewriting

        Posté par  . Évalué à 2.

        Oui, ou alors je m'exprime mal.

        Je voulais juste insister sur ce que fait précisément le module d'url rewriting :

        il reçoit une adresse du genre /articles/lire/14, et la transforme en adresse de la forme index.php&module=articles&action=lire&id=14, et non l'inverse.

        Par exemple, quelque part dans le code HTML de ton site (ou d'un autre site), tu vas avoir un lien du genre :

        <a href="/articles/lire/14">Lire l'article</a>

        Lorsque le serveur apache va recevoir une requête de la forme /articles/lister, il ne sait pas l'interpréter telle quelle, il demande à mod_rewrite de l'interpréter. Celui-ci lui renvoie une url de la forme index.php&module=articles&action=lister.

        Comme ça, ton script PHP est capable de l'interpréter, à l'aide de $_GET. Exemple :

        <?php

        $module = $_GET['module']; // "articles"
        $action = $_GET['action']; // "lister"

        include ("/".$module."/".$action.".php"); // "articles/lister.php"

        ?>

        Attention, ce script ne sert qu'à illustrer mon propos, il ne faut pas l'utiliser tel quel, car il n'est pas du tout sécurisé (pas de vérification du contenu des variables, donc risque d'inclure n'importe quoi)
      • [^] # Re: URL rewriting

        Posté par  . Évalué à 2.

        En ce qui concerne l'expression régulière, je te propose ceci (non testé) :

        RewriteRule ^node/([0-9]+)$ /article.php3?id_article=$1 [L]

        Quelques explications :

        - ne pas oublier ^ et $ en début et fin d'expression à gauche ;

        - le $1 de droite correspond à l'expression régulière entre parenthèses à gauche. Si Il y a plusieurs blocs de parenthèses à gauche, ils prendront les noms $1, $2,... à droite ;

        - attention, pas de / en début d'expression à gauche, mais il y faut en mettre un en début d'expression à droite.

Suivre le flux des commentaires

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