Problème avec ma RewriteRule
16 messages
• Page 1 sur 2 • 1, 2
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
- van___fanel
- Nouveau WRInaute

- Messages: 12
- Inscription: 19 Mar 2007
Problème avec ma RewriteRule
Bonjour,
je tente de me mettre à l'url rewriting, mais je rencontre un problème. Je travaille pour le moment en local.
Après lecture du tutorial WebRankInfo, voilà ma rewriteRule :
Mes URL sont de la forme
Hélas, voilà ce que j'obtiens lorsque je tente d'afficher Accueil.html :
Où est l'erreur ?
Merci d'avance
je tente de me mettre à l'url rewriting, mais je rencontre un problème. Je travaille pour le moment en local.
Après lecture du tutorial WebRankInfo, voilà ma rewriteRule :
- Code: Tout sélectionner
RewriteRule ^()([a-z]+)\.html$ index.php?page_id=$1&page_title=$2 [L]
Mes URL sont de la forme
- Code: Tout sélectionner
index.php?page_id=1&page_title=Accueil
Hélas, voilà ce que j'obtiens lorsque je tente d'afficher Accueil.html :
Not Found
The requested URL Accueil.html was not found on this server.
Où est l'erreur ?
Merci d'avance
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Deux questions:
1. Comment on trouve l'ID a partir de l'adresse en html? Comment on sait que accueil.html est l'ID 1?
2. Dans ta règle tu a
Pour savopri ce qui se passe, remplace le [L] par [R=301]. Tu sauras en quoi est réécrit accueil.html, et donc tu trouvera pourquoi ça ne marche pas.
1. Comment on trouve l'ID a partir de l'adresse en html? Comment on sait que accueil.html est l'ID 1?
2. Dans ta règle tu a
- Code: Tout sélectionner
()
Pour savopri ce qui se passe, remplace le [L] par [R=301]. Tu sauras en quoi est réécrit accueil.html, et donc tu trouvera pourquoi ça ne marche pas.
- van___fanel
- Nouveau WRInaute

- Messages: 12
- Inscription: 19 Mar 2007
1. Bien normalement, il n'y pas besoin d'afficher l'id de la page dans l'url "rewritée". Car si j'ai bien compris, l'url rewriting, c'est juste un système qui applique une url statique par dessus une url dynamique, mais le navigateur sait qu'il s'agit de index.php?page_id=1&page_title=Accueil, lorsque il affiche Accueil.html. Ou alors je n'ai pas tout compris.
2. la première parenthèse vide est justement pour l'id de la page, que je ne souhaite pas afficher dans l'url "rewritée". Cette parenthèse est vide pour que le $1 de la RewriteRule n'affiche rien pour l'id de la page.
J'ai changée le [L] par [R=301], et il ne s'est rien passé de différent. Aucun message d'erreur.
2. la première parenthèse vide est justement pour l'id de la page, que je ne souhaite pas afficher dans l'url "rewritée". Cette parenthèse est vide pour que le $1 de la RewriteRule n'affiche rien pour l'id de la page.
J'ai changée le [L] par [R=301], et il ne s'est rien passé de différent. Aucun message d'erreur.
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
l'URL rewriting sert a transformer des urls, c'est tout, et rien de plus.
avec un R=301, quelle est l'adresse qui s'affiche dans la barre d'adresse de ton navigateur?
Mais ta règles est mal formée avec ta parenthese vide. Si l'id n'a pas besoin d'etre renseigné il faut que tu mette:
avec un R=301, quelle est l'adresse qui s'affiche dans la barre d'adresse de ton navigateur?
Mais ta règles est mal formée avec ta parenthese vide. Si l'id n'a pas besoin d'etre renseigné il faut que tu mette:
- Code: Tout sélectionner
RewriteRule ^([a-z]+)\.html$ index.php?page_title=$1 [L]
- van___fanel
- Nouveau WRInaute

- Messages: 12
- Inscription: 19 Mar 2007
Sauf que j'ai tout de même besoin de la variable $_GET['page_id'], puisque c'est grâce à elle que je vais chercher le contenu de mes pages dynamiques. Donc mon URL ne peut pas ressembler à index.php?page_title=Accueil, mais doit bien être de la forme index.php?page_id=1&page_title=Accueil
Pour le moment, avec un R=301, si je demande d'afficher http://127.0.0.1/Projects/[...]/site/Accueil.html, rien ne se passe.
Si je demande d'afficher http://127.0.0.1/Projects/[...]/site/accueil.html (nom de page sans majuscule initiales), il transforme l'url en
Pour le moment, avec un R=301, si je demande d'afficher http://127.0.0.1/Projects/[...]/site/Accueil.html, rien ne se passe.
Si je demande d'afficher http://127.0.0.1/Projects/[...]/site/accueil.html (nom de page sans majuscule initiales), il transforme l'url en
http://127.0.0.1/D:/Program%20Files/EasyPHP%202.0b1/www/Projects/[...]/site/index.php?page_id=accueil&page_title=
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Il faut donc que tu aie une correspondance entre le nom de la page et son id. Ta première règle ne renseignait même pas l'id soit dit en passant.
Soit tu fais une règle par page, soit tu as cette correspondance dans une base de donnée, et tu dois faire la correspondance en PHP. Cherche sur le forum, ça a été discuté il y a quelques jours.
Une règle par page donne quelque chose comme suit:
etc. Evidemment ce n'est jouable que si le nombre de pages reste faible.
Soit tu fais une règle par page, soit tu as cette correspondance dans une base de donnée, et tu dois faire la correspondance en PHP. Cherche sur le forum, ça a été discuté il y a quelques jours.
Une règle par page donne quelque chose comme suit:
- Code: Tout sélectionner
RewriteRule accueil\.html index.php?page_id=1&page_title=Accueil
RewriteRule page1\.html index.php?page_id=2&page_title=Titre1
etc. Evidemment ce n'est jouable que si le nombre de pages reste faible.
-

KOogar - WRInaute accro

- Messages: 3884
- Inscription: 16 Nov 2004
je suis pas d'accord avec Vap.. sry
C'est trés simple a faire ce que tu veux.. mais ne me demande pas pourquoi, il faut ajouter le NS à la fin.
C'est trés simple a faire ce que tu veux.. mais ne me demande pas pourquoi, il faut ajouter le NS à la fin.
- Code: Tout sélectionner
RewriteRule ^(.*)\.html /page.php?page_id=$2&page_title=$1 [NS,L]
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
KOogar a écrit:je suis pas d'accord avec Vap.. sry
C'est trés simple a faire ce que tu veux.. mais ne me demande pas pourquoi, il faut ajouter le NS à la fin.
- Code: Tout sélectionner
RewriteRule ^(.*)\.html /page.php?page_id=$2&page_title=$1 [NS,L]
Pas besoin d'être désolé. NS sert a éviter certaines erreurs. Mais je ne vois pas quelle sera la valeur de page_id avec ta règle. Peux tu m'expliquer?
Edit: j'ai testé, et c'est bien ce que je pensais, page_id n'est pas renseigné.
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
KOogar a écrit:je pense que c'est un probleme au niveua de la boucle globale, c'st pk sans le NS cela renvois sur la page php
ca etant je te laisse apprecier :
--http://www.urlrewriting.fr/testpriv/met-ce-que-tu-veux-ici.html
Ca fait quoi ton test?
Le test que j'ai fait est de rentrer la règle que tu as donné et d'imprimer page_id et page_title. Seul page_title ($1) est imprimé, et page_id n'est pas défini.
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Je ne joue pas, j'essaie d'aider. Je pense avoir aidé suffisamment de gens avec leurs problèmes de réécriture pour avoir le droit qu'on ne pense pas que je joue. Il suffit de lire ce forum pour le voir.
Bref, aucune des règles proposées ne permet de donner une valeur a page_id. C'est simple à vérifier, et j'ai proposé une solution.
Pas besoin de s'enerver pour ça ni de me dire que je ne dis que des idioties en MP.
Bref, aucune des règles proposées ne permet de donner une valeur a page_id. C'est simple à vérifier, et j'ai proposé une solution.
Pas besoin de s'enerver pour ça ni de me dire que je ne dis que des idioties en MP.
-

Marie-Aude - Modérateur

- Messages: 11173
- Inscription: 5 Juin 2006
Pour utiliser exactement le même type de règle, tu peux récupérer page_id avec $_GET[page_id]
La règle que Koogar t'as donnée est celle que j'utilise, et qui fonctionne.
La règle que Koogar t'as donnée est celle que j'utilise, et qui fonctionne.
- Vap
- WRInaute passionné

- Messages: 1090
- Inscription: 17 Juin 2007
Le diable est dans les détails comme disent les américains.
Voici un .htaccess:
Les deux premières lignes sont pour un hébergement 1and1.
Voici le code de page.php:
Voici une requête (je peux donner par MP le NDD si quelqu'un veut vérifier de visu tout ce que je dis):
Voici ce que ça imprime:
page_id n'est pas défini. C'est ce que je dis depuis le début. Et page_id n'est pas défini car $2 n'est pas défini dans la règle car il n'y a qu'une seule paire de parenthèses dans l'expression régulière.
Vous pouvez tourner ça dans le sens que vous voulez, c'est comme ça. Et n'importe qui peut refaire ce test.
Je ne sais toujours pas ce que le test de Koogar fait par contre. Ce serait bien de le savoir.
Voici un .htaccess:
- Code: Tout sélectionner
AddType x-mapp-php5 .php
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)\.html /page.php?page_id=$2&page_title=$1 [NS,L]
Les deux premières lignes sont pour un hébergement 1and1.
Voici le code de page.php:
- Code: Tout sélectionner
<?php
echo 'page_id='.$_GET['page_id'].' page_title='.$_GET['page_title'];
?>
Voici une requête (je peux donner par MP le NDD si quelqu'un veut vérifier de visu tout ce que je dis):
- Code: Tout sélectionner
http://xxxx.com/toto.html
Voici ce que ça imprime:
- Code: Tout sélectionner
page_id= page_title=toto
page_id n'est pas défini. C'est ce que je dis depuis le début. Et page_id n'est pas défini car $2 n'est pas défini dans la règle car il n'y a qu'une seule paire de parenthèses dans l'expression régulière.
Vous pouvez tourner ça dans le sens que vous voulez, c'est comme ça. Et n'importe qui peut refaire ce test.
Je ne sais toujours pas ce que le test de Koogar fait par contre. Ce serait bien de le savoir.
-

e-kiwi - Modérateur

- Messages: 15544
- Inscription: 23 Déc 2003
bah, qu'est ce que vous dites ?
si il veut recuperer 2 valeurs, c'est à dire page_id et page_title, il doit faire passer ces 2 valeurs dans l'url, à moins de faire la correspondante en php. donc dans ce cas, il devra faire une url du type :
1,accueil.html ou 1-accueil.html (ou accueil-1, c'est lui qui voit)
et dans ça regle de rewrite quelquechose du genre (0-9+),(.+).html vers /page.php?page_id=$1&page_title=$2 (ou inverse)
accueil.html, quelquesoit son rewrite, ne va pas inventer tout seul que l id d'accueil est 1, à moins d'aller le chercher dans la base de données ou autre.
si il veut recuperer 2 valeurs, c'est à dire page_id et page_title, il doit faire passer ces 2 valeurs dans l'url, à moins de faire la correspondante en php. donc dans ce cas, il devra faire une url du type :
1,accueil.html ou 1-accueil.html (ou accueil-1, c'est lui qui voit)
et dans ça regle de rewrite quelquechose du genre (0-9+),(.+).html vers /page.php?page_id=$1&page_title=$2 (ou inverse)
accueil.html, quelquesoit son rewrite, ne va pas inventer tout seul que l id d'accueil est 1, à moins d'aller le chercher dans la base de données ou autre.
16 messages
• Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Problème avec rewriterule !
- problème rewriterule infomaniak
- Problème sur une rewriterule
- Problème RedirectPermanent ou rewriteRule avec Id
- RewriteRule - problème d'écriture de règle
- Petit problème avec un RewriteRule
- Problème de syntaxe .htaccess et RewriteRule
- [Résolu] Problème d'écriture RewriteRule
- Problème avec une règle : RewriteRule ^([^.]+)$
- [Résolu]Problème de syntaxe pour une RewriteRule
- Comment éviter les contenus dupliqués (avec/sans le www) - 26-10-2005
- Aperçu des différents types de redirection - 04-08-2008
- Le bêtisier 2009 du site WebRankInfo : les meilleures perles - 28-12-2009
- Un moyen très simple et gratuit d'obtenir des backlinks - 08-12-2008
- Tutoriel complet sur l'URL Rewriting (réécriture d'URL) - 04-08-2008
- Tutoriel complet sur les redirections (301, 302, JavaScript, ...) - 05-08-2010
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
