Débutant en URL Rewritting

WRInaute occasionnel
Bonjour,

Je souhaiterais mettre en place l'UR pour cette page : h**p://www.paris-yacht.com/photos-paris-yacht.php

Quand on clique sur les photos on a le détail et une nouvelle page.

Je suis chez OVH qui si je l'ai bien compris supporte l'UR. LEs textes des photos et TITLE sont stocké en BDD.

Je souhaterais réécrire ce enlargephotos.php?id=4 en quelque chose comme cela paris-yacht-4.htm . Ce serait déja pas mal mais je n'y arrive pas.

J'ai trouvé quelques bons tutos mais cela ne marche pas.

Mon .htaccess pour le moment :


Code:
RewriteEngine on
RewriteRule ^paris-yacht-([0-9]+)\.htm$  

enlargephotos.php?id=$1  [L]

Merci de votre aide et bon week end !
 
WRInaute impliqué
Salut juliofromlille,
OVH supporte bien l'UR. Essaie en ajoutant un "/" devant "enlargephotos"
Code:
RewriteEngine on
RewriteRule ^paris-yacht-([0-9]+)\.htm$ /enlargephotos.php?id=$1 [L]
 
WRInaute occasionnel
Je teste de suite...

Ah cool, je viens de voir que tu avais réouvert ton annuaire !

Bon je teste cela déja et après on verra...
 
WRInaute occasionnel
Fait ch** ca marche pas.

On est bien d'accord : dans www je met un fichier .htaccess avec dedans

Code:
RewriteEngine on 
RewriteRule ^paris-yacht-([0-9]+)\.htm$ /enlargephotos.php?id=$1 [L]

Et ensuite je n'ai rien à modifier sur mes pages, c'est le serveur qui est censé les renommer et c'est tout ?
 
WRInaute passionné
Je confirme : chez ovh il faut un /
Code:
RewriteEngine on
RewriteRule ^paris-yacht-([0-9]+)\.htm$ /enlargephotos.php?id=$1 [L]


juliofromlille a dit:
Et ensuite je n'ai rien à modifier sur mes pages, c'est le serveur qui est censé les renommer et c'est tout ?

ah si !

Tes liens sur tes pages doivent être de la forme paris-yacht-id.htm :D
 
WRInaute accro
Suis en train d'essayer également (mais pas sur OVH). Chaque fois que je met une commande de rewriting, plus d'accès au site. Est-ce possible que l'hébergeur peut refuser l'URL Rewriting par une configuration spécifique?
Pourtant les commandes de pages d'erreur et quelques autres règles copiées ici et là fonctionnent ....
 
WRInaute discret
Hello,

Oui, il est tout à fait possible pour un hébergeur de restreindre les fonctionnalités des .htaccess ... et dans ce cas : rien à faire :cry:
 
WRInaute impliqué
Salut,

Moi y en a aussi débutant en URL Rewriting et j'ai une question similaire :
Donc voilà, je voudrais qu'une url d'une des formes
  • index[-id-1234].html
  • index-archives-200408[-all][-id-1234].html
  • index-categorie-truc[-all][-id-1234].html

renvoient respectivement aux pages
  • index.php[?id=1234]
  • index.php?archives=200408[&all][&id=1234]
  • index.php?categorie=truc[&all][&id=1234]

Les indications données entre crochets sont optionnelles. On demande donc la page index tout court OU celle d'une certaine date OU celle d'une certaine catégorie. Chacun de ces modèles peut spécifier un id. Le paramètre all est susceptible d'apparaître uniquement si on est dans archives OU catégorie.

Si quelqu'un sait dépatouiller ça, je ne vois pas du tout comment gérer les enchaînements de rêgles pour préciser que certains paramètres sont optionnelles.

Autre question :
Comment écrire une rêgle disant : si l'URL est de telle forme (indexTRUC.html) mais ne correspond pas à tel pattern, remplace par index.php ?

Merci :D
 
WRInaute discret
Hello,

Je ne sais plus où j'ai trouvé cet exemple de réécriture récursive (désolée), et je ne l'ai pas testé ! mais ça peut peut être te mettre sur la piste :

Pour passer de index-var1-valeur1-var2-valeur2-....-varN-valeurN.html
à index.php?var1=valeur1&var2=valeur2&...&varN=valeurN
Code:
RewriteEngine on
RewriteRule index(-.+)-([^-]+)-([^-&]*)([^-]*)\.html index$1&$2=$3$4\.html [N]
RewriteRule index-([^-]+)-([^-]*)(.*)\.html index.php?$1=$2$3 [L]

bonne chance :wink:

EDIT : voici un début d'explication pour ces lignes
Pour décoder ce type d’URL, deux lignes suffisent.
la première ligne va boucler sur elle même de manière à traiter un couple variable/valeur à la fois. Elle comprend 4 "blocs" que nous réécrivons à l’aide du mécanisme de "référence arrière" d’Apache (appelé "backreference" dans la documentation).
Cette boucle est contrôlée par le flag [N] en fin de règle. Ce flag donnant instruction au serveur Apache de recommencer les règles au début du fichier si la règle est vérifiée.
La deuxième règle est triviale et ne devrait vous poser aucun problème de compréhension. Elle marquera la fin de la réécriture grâce au flag [L]
Attention aux boucles infinies !
 
WRInaute impliqué
Trashbox, merci beaucoup pour ces rêgles. Je vais les tester sur mon Apache perso et je dirai ce que ça donne.
A priori, ce n'est pas exactement la façon dont je voyais mon URL, mais l'adaptation ne devrait pas poser problème.

Suite :
Après quelques tes s sur mon Apache perso, il semblerait que ça marche assez bien. J'ai donc utilisé les rêgles suivantes :
Code:
RewriteRule index(-.+)-([^-]+)-([^-&]*)([^-]*)\.html index$1&$2=$3$4\.html [N]
RewriteRule index-([^-]+)-([^-]*)(.*)\.html index.php?$1=$2$3 [L]
RewriteRule index(.*).html index.php

NB : Remarquez la rêgle supplémentaire à la fin.
Mes URL devront donc être de la forme
Code:
index(-variableN-valeurN)+.html
toute autre forme renvoyant à index.php. D'autre part, avec un simple test sur le nom, le nombre et la valeur des paramètres, je pourrais renvoyer automatiquement à inde.php toute URL ayant la forme correcte mais des paramètres incorrects.

Encore merci Trashbox :D
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut