Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2010, 10h45   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Par défaut Suite d'une réécriture

Bonjour,

Je viens de réaliser une réécriture d'une url avec paramètres et celle-ci fonctionne.

Url d'origine : details_produit.php?url=$1&id=$2 (url = nom du produit)
Url réécrite : nomproduit-id

fait comme ceci :

Code :
1
2
3
4
RewriteEngine On
RewriteCond %{QUERY_STRING} ^url=([^&]*)&id=([^&]*)$
RewriteRule ^details_produit\.php$ /%1-%2? [R=301,L]
RewriteRule ^([a-zA-Z0-9-]+)-([0-9]+)$ /details_produit.php?url=$1&id=$2&rewriting [L]
Le problème est que l'url réécrite dans le navigateur est du style www.ndd.com/nomproduit-id et lorsque je change l'id à la main je change bien de page (donc de produit) mais la première partie nomproduit reste et ne prend pas en compte le nouvel id.
En clair, je peux mettre n'importe quel id, le nom de produit ne bouge pas !

Il y a une incidence lorsque je veux réaliser mon sitemap, le logiciel détecte des noms de produits avec des id ne correspondant pas alors que sur mon site, chaque produit appelé à son id correspondant.

Je suis assez perplexe, y a t'il un moyen de 'synchroniser' nomproduit+id en cas d'intervention 'manuelle' du visiteur avec une modif de la règle d'écriture ?

Comment faire un sitemap qui soit le reflet exact de ce qui est présent ?

J'espère que j'ai été suffisamment clair ! En tout cas n'hésitez pas à me poser des questions. Merci d'avance.
Piauhurleur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 17h06   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 277
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 277
Points : 8 563
Points : 8 563
Le seul moyen simple de synchroniser les deux est de le faire dans le code PHP de details_produit.php : en haut de cette page, tu ajoutes le contrôle et si ce contrôle n'est pas bon, tu rediriges (301) le navigateur vers la bonne URL.

Je n'ai pas compris comment ton sitemap peut contenir des noms de produits et des ID désynchronisés.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 18h16   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Citation:
Envoyé par _Mac_ Voir le message
Le seul moyen simple de synchroniser les deux est de le faire dans le code PHP de details_produit.php : en haut de cette page, tu ajoutes le contrôle et si ce contrôle n'est pas bon, tu rediriges (301) le navigateur vers la bonne URL.
Tu peux développer un peu ton idée, s'il te plait ? Tu as un exemple à me montrer ?

Pour le sitemap, je t'avoue ne pas comprendre non plus...
Piauhurleur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 22h28   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 277
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 277
Points : 8 563
Points : 8 563
Bah, c'est pas bien compliqué dans le principe :
Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// Parametres de l'URL
$url = $_GET["url"];
$id  = $_GET["id"];
 
// Vraie valeur attendue de URL
// Comme je ne connais pas ton site, c'est impossible de dire comment recuperer cette vraie valeur. Sûrement en faisant une requete dans une base de donnees.
$vraie_url = ...;
 
// On compare
if ($url != vraie_url) {
    // On redirige
    header("301 Moved Permanently");
    header("Location: /".$vraie_url."-".$id);
}
?>
Alors évidemment ce code est très mauvais car je ne traite pas le cas où l'ID passé dans l'URL n'existe pas, il faut encoder $vraie_url pour construire l'URL de redirection, etc.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2010, 16h34   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Par défaut Suite...

J'ai testé la solution proposé avec ceci

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$vraie_url = $_SERVER['REQUEST_URI']; //url afficher par le lien

$url = $toto['nom']; // appel du nom correspondant à l'id

$id = $toto['id'];// appel de l'id correspondant au nom
$rep = '/beta/'; //répertoire de test

#Mise en forme url
$urltested = $rep .$url.-$id; // url correspondant à l'id affiché

if ($vraie_url != $urltested) {
    // On redirige
	
        header('301 Moved Permanently', false, 301);
	header('Location: ' .$urltested); //redirection
	echo "url rewrité";

}  ?>
Sous Wamp en local, cela marche bien car si je modifie l'id, le nom associé est rechargé et correspond à présent !

En ligne cela me plante avec une internal error (erreur 500). Ma page produit lors de l'appel par le lien s'affiche correctement, mais si je modifie l'id (comme en local), j'ai cette erreur 500 !!! (j'ai bien sur viré le répertoire beta)

Si je supprime la ligne
Code :
<?php header('301 Moved Permanently', false, 301);?>
, apparemment cela se passe bien...

Une idée de ce qui se passe ?

Merci pour ta patience.
Piauhurleur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2011, 20h25   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 277
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 277
Points : 8 563
Points : 8 563
Je pense que la chaîne renvoyée n'est pas compatible avec la version de HTTP supportée par le serveur. Il faut essayer avec ceci :
Code PHP :
header('HTTP/1.x 301 Moved Permanently', false, 301);
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h30.


 
 
 
 
Partenaires

Hébergement Web