Rewriting avec variable

Résolu
allan -  
minalud Messages postés 99 Statut Membre -
Bonjour,

j'aimerais réécrire des liens du style:

www.monsite.fr/flyer.php?1=value

en

www.monsite.fr/value.html

Je sais que je dois modifier les regles de rewriting dans mon fichier .htaccess mais je ne sais pas quoi mettre malgré mes recherches...
Merci d'avance!

11 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    Il vous faudra écrire les liens de votre page tel que vous souhaiteriez qu'ils soient.
    Exemple: <a href="www.monsite.fr/mapage.html">Mon Lien</a>

    ensuite dans le htaccess essayez ceci:

    # Le module de reecriture doit etre activer dans apache !  
    
    <IfModule mod_rewrite.c>  
    
    RewriteEngine On  
    
        RewriteRule ^(.+\.html)$    www.monsite.fr/flyer.php?page=$1  
    
    # Peut servir a la redirection des erreurs  
        ErrorDocument 403    www.monsite.fr/index.php?page=403  
        ErrorDocument 404    www.monsite.fr/index.php?page=404  
        ErrorDocument 500    www.monsite.fr/index.php?page=500  
    
    </IfModule>


    Cela aura pour effet de rediriger tous les liens se finissant par ".html" vers la page flyer.php et creera la variable "page" contenant le nom de la page demandee
    Exemple:
    le lien <a href="www.monsite.fr/mapage.html">Mon Lien</a>
    sera réécrit et "redirigera" vers la page "flyer.php" avec la variable $_GET['page'] valant "mapage.html"

    Ps: les variables ne peuvent pas commencer par un chiffre et encore moins ne contenir que cela, donc "flyer.php?1=value" n'est pas autorisee. (voir: http://www.php.net/manual/fr/language.variables.basics.php )

    En esperant avoir eclairer votre lanterne.
    Cordialement

    +++ Spangenhelm +++
    0
    1. allan
       
      Merci de ta réponse claire, malheureusement ton lien n'est pas disponible pour le moment, peux-tu m'expliquer brièvement pourquoi une variable ne peut pas être uniquement un chiffre?
      je l'ai déjà fais dans une autre page et cela fonctionne correctement.
      0
  2. allan
     
    Le bout de code donné (et donc adapté) ne fonctionne pas.
    Pour être plus précis donc dans ma requête:
    le lien dans ma page 1 est du type:
    <a href="flyer-soirees.html"> Flyer de soirées </a>

    l'url brute du lien est
    www.monsite.fr/flyer.php?valeur=$evenement
    0
  3. Utilisateur anonyme
     
    Re, le lien est ok juste un petit souci de parentheses. Pour le nom de la variable je n'ai pas dit que cela ne fonctionnerait pas j'ai juste dit que ce n'etait pas autorisé (dixit la doc et les conventions de nommages php) maintenant si vous me dites que ca marche je vous crois ;-)

    Pour le reste je viens de tester avec cette regle:

    RewriteRule ^(.+\.html)$     /index.php?v=$1 [L]
    avec

    ****://localhost/monsite/mi-p.html
    et elle fonctionne. Peut-etre le probleme venait-il du "www", tentez de reecrire le lien vers votre page flyer par rapport a la racine de votre site. Cela donnerait:

    RewriteRule ^(.+\.html)$    /flyer.php?page=$1 
    
    si la page se trouve a la racine.

    Ps: qu'est ce que vous appeler votre "url brute" ?
    Mieux vaut enlever le signe dollar, cela risque de vous embrouiller et n'a rien a faire la:
    www.monsite.fr/flyer.php?valeur=$evenement
    www.monsite.fr/flyer.php?valeur=evenement <-ok

    Tenez moi au courant

    +++ Spangenhelm +++
    0
  4. arthezius Messages postés 3756 Statut Membre 475
     
    J'ajoute juste que l'url rewriting doit être activé dans la config du serveur.
    Cela se fait dans le fichier httpd.conf
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. allan
     
    en fait le dollar est là car c'est une valeur en PHP que j'insère,
    l'url rewriting est bien activé puisqu'il fonctionne pour d'autres pages.
    J'essaie la solution de Spangenhelm et je vous tiens au courant,
    merci de vos aides en tout cas!
    0
  7. minalud Messages postés 99 Statut Membre 8
     
    Bonjour,

    pour activer l'url rewriting, le module doit être chargé.

    ensuite, il faut activer l'option FollowSymLinks
    (tu peux faire ça dans un .htaccess)

    ensuite, tu actives le moteur de rewriting avec RewriteEngine On

    puis, la règle qui pourrait te convenir:

    www.monsite.fr/value.html =>

    RewriteRule ^/(.*)\.html$ flyer.php?1=$1 [L]

    en d'autres termes, dans un .htaccess (en esperant que tu as la directive AllowOverride activée dans la config de base d'apache), tu mets:

    ###########################
    Options +FollowSymLinks
    RewriteEngine On

    RewriteRule ^/(.*)\.html$ flyer.php?1=$1 [L]
    #############################

    Le [L] à la fin est là pour dire de ne pas vérifier d'autres règles si celle ci match.

    J'ai écrit ça un peu à la volée, je ne sais pas si j'ai fait des fautes, mais teste, ça marchera peut etre...

    Bonne journée!
    0
  8. Utilisateur anonyme
     
    Re,

    Pour l'adresse de redirection mieux vaut la mettre en absolu il me semble.
    Sinon bien jouer pour l'explication sur "Options +FollowSymLinks", le [L] et le AllowOverride !
    Ce qui se conçoit bien s'énonce clairement... mouais enfin sauf en informatique !
    0
    1. minalud Messages postés 99 Statut Membre 8
       
      Merci!

      dans les mécanismes d'apache, tu peux travailler en absolu ou en relatif.
      si tu veux absolument travailler en relatif, il faut rajouter la règle de passthrough à la fin, ce qui donne un truc comme:

      RewriteRule ^/(.*)\.html$ flyer.php?1=$1 [L,PT]

      ça permet de forcer l'interprétation.

      Enfin, j'espère que c'est ça! :)

      tout doit être dans la doc d'apache!
      0
  9. allan
     
    Merci à tous, je teste ca demain et je vous tiens au courant!
    0
  10. allan
     
    Merci à tous, je suis presque arrivé à ce que je voulais! il me reste une derniere petite difficulté,
    j'arrive à tout renommer correctement mais je voudrais faire une petite modification. Petites précisions auparavant:
    j'ai renommé ma page "flyer.php" en "advert.php" ,et ma variable passé en url s'appelle désormais "id" (merci Spangenhelm).

    Voici mon code dans htaccess:
    <IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteRule advert([a-z]+) advert.php?id=$1
    </IfModule>

    et dans ma page contenant le lien:

    <?php
    $produit= Array("depliant","flyer","affiche","cartes de visite");
    for($i=0;$i<count($produit);$i++)
    echo '<a href="advert'.$produit[$i].'.html">.</a>';
    ?>

    j'aimerais supprimer le "advert" de l'url, afin d'obtenir finalement une URL du type:
    produit.html
    plutot que
    advertproduit.html

    j'ai fais quelques essais mais je n'y arrive pas =/
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      Change:
      RewriteRule advert([a-z]+) advert.php?id=$1 

      en
      RewriteRule ([a-z]+) advert.php?id=$1 

      et
      echo '<a href="advert'.$produit[$i].'.html">.</a>'; 

      en
      echo '<a href="'.$produit[$i].'.html">.</a>'; 

      ça devrait le faire :)
      0
  11. allan
     
    Merci arthezius, en fait je viens de me rendre compte que je ne le mettrais pas en place sinon ca me rewrite tout mes liens dans le site , plutot génant !
    Merci à tous pour vos précieuses aides et pour vos lumières!
    0
    1. minalud Messages postés 99 Statut Membre 8
       
      si tu conserves une bonne nomenclature ou une pseudo arborescence, tu peux le faire en utilisant les directives RewriteCond!

      Tu définis des conditions pour lesquelles tu as une réecriture à faire, si cela correspond, tu l'appliques!
      0