Rewriting avec variable

Résolu/Fermé
allan - 10 févr. 2011 à 17:43
minalud Messages postés 91 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 4 janvier 2013 - 14 févr. 2011 à 16:16
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

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
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
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
Utilisateur anonyme
10 févr. 2011 à 19:41
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
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
10 févr. 2011 à 20:22
J'ajoute juste que l'url rewriting doit être activé dans la config du serveur.
Cela se fait dans le fichier httpd.conf
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
minalud Messages postés 91 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 4 janvier 2013 8
12 févr. 2011 à 13:43
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
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
minalud Messages postés 91 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 4 janvier 2013 8
13 févr. 2011 à 12:45
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
Merci à tous, je teste ca demain et je vous tiens au courant!
0
Utilisateur anonyme
14 févr. 2011 à 06:57
De rien, tu peux aussi aller voir ici: https://www.grafikart.fr/tutoriels/url-rewriting-71
+++ Spangenhelm +++
0
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
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
14 févr. 2011 à 11:32
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
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
minalud Messages postés 91 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 4 janvier 2013 8
14 févr. 2011 à 16:16
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