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
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
11 réponses
Utilisateur anonyme
Modifié par Spangenhelm le 10/02/2011 à 20:30
Modifié par Spangenhelm le 10/02/2011 à 20:30
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:
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 +++
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 +++
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
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
Utilisateur anonyme
10 févr. 2011 à 19:41
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:
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 +++
Pour le reste je viens de tester avec cette regle:
RewriteRule ^(.+\.html)$ /index.php?v=$1 [L]avec
****://localhost/monsite/mi-p.htmlet 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=$1si 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 +++
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
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
Cela se fait dans le fichier httpd.conf
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!
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!
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
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!
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!
Utilisateur anonyme
Modifié par Spangenhelm le 13/02/2011 à 06:56
Modifié par Spangenhelm le 13/02/2011 à 06:56
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 !
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 !
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
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!
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!
Utilisateur anonyme
14 févr. 2011 à 06:57
14 févr. 2011 à 06:57
De rien, tu peux aussi aller voir ici: https://www.grafikart.fr/tutoriels/url-rewriting-71
+++ Spangenhelm +++
+++ Spangenhelm +++
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 =/
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 =/
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
14 févr. 2011 à 11:32
Change:
en
et
en
ça devrait le faire :)
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 :)
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!
Merci à tous pour vos précieuses aides et pour vos lumières!
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
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!
Tu définis des conditions pour lesquelles tu as une réecriture à faire, si cela correspond, tu l'appliques!
10 févr. 2011 à 18:52
je l'ai déjà fais dans une autre page et cela fonctionne correctement.