8791 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Voici un nouveau problème que je vais vous soumettre.

J'ai un site qui, pour afficher les informations sur un contact, se connecte à une base de données et récupère les infos via un $_GET['id'].

J'ai donc des URLs de ce type :

www.domaine.com/fiche.php?id=099494

Cependant, je souhaiterais après avoir modifié certaines données dans ma base que cette même adresse soit redirigée de façon permanente vers l'adresse suivante :

www.domaine.com/fiche.php?id=134

De plus, je souhaiterais que cette dernière adresse soit ré-écrite dans le genre :

www.domaine.com/annuaire-contacts/nom-prenom.php

Pour ce faire, je me suis créé un fichier .htaccess avec le code suivant :


Options +FollowSymlinks

RewriteEngine on

RedirectPermanent /carte.asp  http://www.domaine.com/contacts.php
 

RedirectPermanent /fiche.php?id=099494  http://www.domaine.com/fiche.php?id=134
 
RedirectPermanent /fiche.php?id=134  http://www.domaine.com/annuaire-contacts/dupond-jean.php
 


Et là, quelle surprise, rien ne fonctionne.

D'une part, je ne parviens pas à faire ma fameuse redirection et en plus, ma ré-écriture ne se fait pas !

Je possède tout de même environ 280 entrées dans ma base de données avec autant de changement à faire via mon fichier .htaccess

Je vous passe donc l'erreur 500 que cela me cause sur mon serveur.

Mis cela à part, je ne comprend pas pourquoi au moins ma redirection ne se fait pas pour l'URL contenant un "?id=" alors que celle se terminant par carte.asp est bel et bien redirigée sur contacts.php

C'est un mystère pour moi qui suit totalement novice dans le domaine des redirections et url-rewriting !

Auriez-vous une petite idée ?

Le problème viendrais-t'il de se fameux "?id=" ?

Si oui, quelle est la solution ou plutôt quelle est la syntaxe correcte à utiliser dans mon fichier .htaccess ?

Parmi tous les développeurs de haut vol que Alsacréation compte, il y a-t'il quelqu'un de familier avec ces redirections ?

Je vous remercie grandement pour vos conseils et aides. Smiley confused

A très vite Smiley ravi
Modifié par nikkyken (02 Oct 2008 - 19:42)
Je me trompe peut-être mais je ne crois pas qu'on puisse rediriger une adresse contenant une query string de cette façon. IL me semble que c'est pris comme un nom de fichier normal dans le cas d'une instruction redirectt. Information à vérifier dans les doc d'apache, je n'ai aucune idée où les trouver.

Un nom de fichier contenant un point d'interrrogation étant de toute façon impossible autant sous windows que sous un OS basé UNIX, la redirection ne pourrait alors jamais être utilisée.

A défaut de solution, au pire, tu peux commander toi-même la redirection dans ton script fiche.php. AVec ce genre de code :

$nouvelle_url = "machin-truc.php?bidule=1234&chose=5678";
header("HTTP/1.0 301 Moved permanently");
header("Location:$nouvelle_url");
exit();

C'est probablement moins maintenable que dans un .htaccess mais ça peut dépanner au cas où.
D'ailleurs écrire 200 règles de redirection individuelles, je ne pense pas que ce soit une solution non plus. Il doit y avoir une logique derrière tout ça qui te permette de n'en écrire que deux ou trois maximum.
Modifié par QuentinC (23 Sep 2008 - 16:49)
Hello,

Ce ne sont pas des redirections que tu essaies de faire, ce sont des réecritures, c'est la règle RewriteRule que tu dois utiliser, pas RedirectPermanent dans ce cas.

En fait tu voudrais que toutes les adresses ?id=65464 arrivent vers ?id=134 ?
et que toutes les adresses /annuaire-contacts/nom-prenom.php arrivent aussi vers ?id=134, quels que soient l'id, le nom ou le prénom ?

Edit : Pour ton histoire d'id il vaut mieux voir ca directement dans le php comme te conseilles Quentin cela dit.
Modifié par Tymlis (24 Sep 2008 - 01:28)
Tymlis a écrit :
Hello,

Ce ne sont pas des redirections que tu essaies de faire, ce sont des réecritures, c'est la règle RewriteRule que tu dois utiliser, pas RedirectPermanent dans ce cas.

En fait tu voudrais que toutes les adresses ?id=65464 arrivent vers ?id=134 ?
et que toutes les adresses /annuaire-contacts/nom-prenom.php arrivent aussi vers ?id=134, quels que soient l'id, le nom ou le prénom ?

Edit : Pour ton histoire d'id il vaut mieux voir ca directement dans le php comme te conseilles Quentin cela dit.


Bonjour Tymlis.

En effet, j'aimerais que l'adresse ?id=099494 arrive vers l'adresse ?id=134, sachant que chaque numéro "ici le 134" correspond à une entrée dans ma base de données (le premier nombre "ici le 099494" ne correspondant en fait plus à rien dans cette même base de données).

De plus, si pour le numéro 134 mon contact s'appel Jean Dupond, j'aimerais que ma dernière redirection (ou ré-écriture, si c'est ce qu'il faut faire) donne :

?id=134 vers /annuaire-contacts/dupond-jean.php

Par conséquent, cette dernière redirection (ou ré-écriture) va changer en fonction de l'id dans la base !

?id=149 vers /annuaire-contacts/durand-martine.php
?id=154 vers /annuaire-contacts/dupuis-jacques.php

etc...

Il faut savoir que mes pages /annuaire-contacts/nom-prenom.php n'existent pas. Je ne souhaite voir qu'un changement dans la barre d'adresse, pour un référencement plus facile dans les moteurs de recherche (qui n'aiment pas trop les variables passées en URLs) !

Merci pour ton commentaire, j'espère avoir réussi à expliquer mieux ce que je recherche.

Si tu as un petit exemple de code à me proposer ce serais super. Cela fait plus d'une semaine que je galère avec ce truc Smiley sweatdrop

Merci par avance pour tout aide que tu pourrais m'apporter !

QuentinC

Merci pour ton commentaire. Je garde ta solution au cas où ! Mais je ne suis pas sûr que cela fonctionne dans mon cas !

Merci tout de même pour ton aide.