Probleme dans mon URL Rewriting mais lequel :(

WRInaute occasionnel
Bonjour,
je gére un site sur ds assurances de prêt. Je voudrais passer par des url Re pour optimiser le referencement du site du cabinet.

Mon site contient un index (avec tout le graphique) et au centre j'ai mes pages contenus que j'appelle via un menu.

Ce qui me donne un chose du genre : index.php?page=compagnies_partenaires/toto.htm

Je voudrais que mon adresse fasse quelque chose comme http://www.xxxxxxxx.fr/assurance-de-pre ... aires-toto

J'ai codé ça mais ça ne semble pas fonctionner. De plus dans ma "nouvelle url", je voudrais pouvoir ajouter des mot clefs selon des pages bien précises sachant que j'ai environ 50-60 pages.

Code:
RewriteEngine on 
RewriteRule ^assurance-de-pret/(.*)/(.*)$ /index.php?page=$1/$2 [L]

Merci d'avance
 
WRInaute impliqué
le format de ta variable avec le slash me parait bizarre. En tout cas, je n'ai jamais vu faire comme ca.
Il ne te manquerais pas un nom de variable avant le $2 ?
 
WRInaute impliqué
oui mais pour moi compagnies_partenaires devrait etre en dur dans ton code ainsi que l'extension .htm

donc ton adresse devrait etre index.php?page=toto et donc

Code:
RewriteRule ^assurance-de-pret/(.*)$ /index.php?page=$1 [L]

dans ton index.php tu peux faire

Code:
$page = isset($_GET['page']);
$new_page = "compagnies_partenaires/".$page.".htm";

Enfin c'est à tester.....
 
WRInaute occasionnel
je n'ai pas tout compris là...

compagnies_partenaires est un dossier qui contient certaines pages contenues. j'ai d'autres dossier du même genre
 
WRInaute discret
jiojioforever a dit:
J'ai codé ça mais ça ne semble pas fonctionner. De plus dans ma "nouvelle url", je voudrais pouvoir ajouter des mot clefs selon des pages bien précises sachant que j'ai environ 50-60 pages.

Code:
RewriteEngine on 
RewriteRule ^assurance-de-pret/(.*)/(.*)$ /index.php?page=$1/$2 [L]

C'est un peu "bourrin" d'utiliser (.*), surtout les expressions à rechercher ne présentent que des caractères alphanumériques, quelque comme ([a-z0-9-]) (ou [:alnum:-]) est peut-être plus approprié.

Il faut savoir que (.*) exclura / seulement si le moteur d'expressions régulières est en mode "no greedy". C'est une référence à celui de PHP, je ne sais pas trop ce qu'il en est pour Apache. Si non (.*) "mange" toute l'expression et ignorera donc le second (.*). Donc en "mode greedy" « ^assurance-de-pret/(.*)/(.*)$ » reviendrait à écrire « ^assurance-de-pret/(.*)$ ».

Quelqu'un a plus d'infos sur le comportement gourmand ("greediness") du module Apache ?
 
WRInaute occasionnel
goa103 a dit:
Si non (.*) "mange" toute l'expression et ignorera donc le second (.*). Donc en "mode greedy" « ^assurance-de-pret/(.*)/(.*)$ » reviendrait à écrire « ^assurance-de-pret/(.*)$ ».

Non, pas du tout. Son rewriting mentionne expressement /(.*)/(.*)$
Le moteur d'expression régulière passera par une phase ou il mettra l'ensemble de l'URL dans le premier (.*), mais comme cela ne matche pas la regexp indiquée, le moteur continuera jusqu'à trouver quelque chose qui matche ou se retrouver à cours de possibilités.

Dans son cas, donc, /(.*)$ et /(.*)/(.*)$ n'ont absolument pas le même résultat puisque le second cas impose la présence d'au moins deux signes '/' et le découpage en deux variables au niveau du dernier / trouvé. PAr contre, si tu as plusieurs /, ceux-ci seront effectivement absorbés pas le premier (.*), par exemple :
assurance-de-pret/machin/truc/bidule/pwet
donnera : $1 = machin/truc/bidule et $2 = pwet

Ceci dit, il est vrai que l'utilisation du .* est à bannir, pour les plus fainéant, au moins le remplacer par .+ comme ça on est sur d'avoir au moins un caractère, mais le mieux est effectivement de réduire le nombre de caractéres autorisés à leur minimum comme expliqué ci dessus.
 
WRInaute discret
ChezThierry a dit:
Non, pas du tout. Son rewriting mentionne expressement /(.*)/(.*)$
Le moteur d'expression régulière passera par une phase ou il mettra l'ensemble de l'URL dans le premier (.*), mais comme cela ne matche pas la regexp indiquée, le moteur continuera jusqu'à trouver quelque chose qui matche ou se retrouver à cours de possibilités.

Merci pour cette explication détaillée. Donc le moteur semble être en mode "ungreedy" par défaut. Voir la page PHP: Pattern Modifiers - Manual pour comprendre de quoi je parle. J'ai en fait découvert les "regexp" avec PHP, je trouve que c'est un bon moyen pour découvrir cette technique. ça permet de tester ses expressions notamment même si leur comportement semble un peu différent selon la techno utilisée. Il y a en fait deux moteurs dispos dans PHP. Celui du module Apache semble plus apparenté à celui décrit sur la page PHP: Regular Expression Functions (POSIX Extended) - Manual.
 

➡️ 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