réécrire /categorie.php?id=xxx en /categorie/id

WRInaute discret
Bonjour à tous !

je suis en train de refaire mon site et, dans un souci de conserver mon référencement actuel, je souhaite garder le format de mes URLs. :cool:

J'ai des URLs de type monsite.tld/categorie/id et j'aimerais que ça pointe sur monsite.tld/categorie.php?id=xxx
j'ai donc écrit
Code:
SetEnv REGISTER_GLOBALS 0
SetEnv SESSION_USE_TRANS_SID 0

AuthType none
Satisfy any
Options +FollowSymlinks
RewriteEngine on
DirectoryIndex index.php

<IfModule mod_rewrite.c>
   # redirection d'URL générales
   RewriteRule ^categorie/([0-9]{1,2})$ categorie.php?id=$1 [L]
</IfModule>

mais ça ne fonctionne pas : la page categorie.php est appelée mais le paramètre n'est pas reconnu (et la css est complètement pétée, comme si la page se trouvait effectivement dans un sous-dossier nommé categorie, ce qui n'est pas le cas)

j'ai essayé 36 trucs :
  • avec ou sans / au début,
  • avec ou sans ^ au début,
  • avec ou sans $ à la fin,
  • avec ou sans / au début de l'url réelle
  • avec ou sans QSA (qu le serveur ne semble pas aimer car erreur 500)
  • ([0-9]+) ou même simplement (.*)

mais rien à faire... je ne comprends pas o_O
si j'appelle categorie.php?id=xxx, ça fonctionne très bien donc le problème est vraiment au niveau de la réécriture

en dernier recours, je pourrais tenter de faire des urls réécrites du genre categorie-id.html mais j'aimerais éviter d'en arriver là et de devoir mettre des 301 dans tous les sens pour changer le format actuel (qui me paraît être très clair) :(

merci d'avance
 
WRInaute discret
et la css est complètement pétée, comme si la page se trouvait effectivement dans un sous-dossier nommé categorie

Alors ça c'est simple à corriger:

Tu dois modifier tous ce genre de choses:
<link rel="stylesheet" href="css.php" />

par:
<link rel="stylesheet" href="/css.php" />

Dans le contenu des fiochiers css/js aussi il faut remplacer tous les noms des fichiers background:url(images.jpg) devient par exemple background:url(/images.jpg)


Et idem pour ça peut-être:

categorie.php?id=$1 [L]

par:

/categorie.php?id=$1 [L]

le [L] n'est peut etre pas obligatoire, il suffit de le retirer
 
Dernière édition:
WRInaute discret
.htaccess :
Code:
RewriteEngine on
RewriteRule ^categorie/([0-9]{1,2})$ /categorie.php?id=$1


categorie.php :
Code:
<?php

echo $_GET['id'];
?>

Je viens d'essayer ça, et tout fonctionne:

https://site.com/categorie/20 // il affiche 20, etc..

Il ne faut pas oublier de supprimer le cache ou redémarrer l navigateur à chaque modification du fichier .htaccess car tu risques de passer à côté d'un truc qui fonctionne vraiment mais que c'est ton cache de la modification précédente qui pose problème...
 
WRInaute discret
en fait, ça vient de l'hébergement visiblement

la réécriture cat/xx vers categorie.php?id=xx fonctionne mais pas si je mets categorie/xx
comme si c'était réservé
categorie.php existe et l'hébergeur redirige tout seul /categorie (sans extension) vers /categorie.php
je pense que c'est ça qui fout la grouille mais je ne sais pas comment faire du coup

NB : hébergeur = OVH mutualisé
 
Dernière édition:
WRInaute discret
Est-ce que tu as un dossier nommé "categorie" dans ton FTP à la racine là où il y a .htaccess ?
Si la réponse est oui, il me semble avoir déjà vu que celui du site est pris en compte avant le
RewriteRule (ou c'est l'inverse, je sais plus)
 
WRInaute discret
non aucun dossier avec les "noms" demandés pour les urls ré-écrites
finalement, j'ai renommé les fichiers php, pour qu'ils aient des noms différents des URLs... merci OVH ><
 
Discussions similaires
Haut