[resolu] Convertir une URL en minuscule

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

philippe64
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 23 Juil 2004

[resolu] Convertir une URL en minuscule

Message le Mar Déc 04, 2007 17:42

Suite à une modification de nommage d'un grand nombre de fichiers sur un site,
et ne voulant pas perdre l'ancien référencement, je souhaite établir une règle
de réécriture pour rediriger les moteurs de recherche vers les nouvelles URL.

Certains noms de fichiers pouvait contenir des majuscules, le nouveau nom est entièrement en minuscules.

Exemple :

Merci-Pour-Votre-Aide.html --> merci-pour-votre-aide.html

J'ai trouvé cette méthode en cherchant sur des forum, mais elle marche pas :
Code: Tout sélectionner
RewriteEngine on
RewriteMap  lowercase  int:tolower
RewriteCond  $1  [A-Z]
RewriteRule ^(.*)\.html$   ${lowercase:$1}.html   [R=301,L]


Ensuite, j'ai trouvé ça (tout seul) :

Code: Tout sélectionner
RewriteEngine on
RewriteRule ^([A-Z]+.*)\.html$ \L$1\E.html [L]


^([A-Z]+.*)\.html$ --> verifie que le premier caractère est une majuscule et que la chaine se termine par .html

\L$1\E.html --> pourquoi \L...\E ne fonctionne pas ? (censé passé en minuscule, non ?)

En bref, j'ai besoin d'un peu d'aide sur ce coup là... Merci d'avance
Dernière édition par philippe64 le Jeu Déc 06, 2007 10:22, édité 1 fois.


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Mar Déc 04, 2007 18:39

Salut, t'as aussi essayé ce mélange ? :p

Code: Tout sélectionner
RewriteEngine on
RewriteRule ^(.*)\.html$ \L$1\E.html [L]

philippe64
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 23 Juil 2004

Message le Mar Déc 04, 2007 18:44

non, c'est la même chose, sauf que tu testes pas si la première lettre est en MAJUSCULES.


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Mar Déc 04, 2007 18:49

Mais à la limite on s'en fou que la première lettre soit en majuscule et pas le reste non ? Quand tu passes tout en minuscule, il chipote pas !

Tu peux toujours verifier l'url dans ton code par après ! Si différent de ce que tu veux, tu rediriges 301 vers la bonne.

philippe64
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 23 Juil 2004

Message le Mar Déc 04, 2007 18:57

Oui on s'en fou, mais ça marche pas quand même (j'ai testé)

C'est ça qui va pas : \L$1\E.html


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Mar Déc 04, 2007 19:42

philippe64 a écrit:Oui on s'en fou, mais ça marche pas quand même (j'ai testé)

C'est ça qui va pas : \L$1\E.html


tu l'a trouvé ou cette commande Perl ? qui doit marcher dans des fonctions PCRE mais j'ai un gros doute que cela puisse marcher dans 1 .htaccess

philippe64
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 23 Juil 2004

Message le Mar Déc 04, 2007 22:54

Je vois bien qu'il y a un problème... Il n'y a donc pas de solution pour un truc simple comme ça ?
C'est pas le premier post que je trouve sans réponse pour ce même cas. Il y a pas un super doué qui pourrait trouvé une solution ?


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Mer Déc 05, 2007 0:42

fait le en php, c'est vite fait !!

je te fais la fonction pour que tu puisses tester si le premier caractere de l'uri est en majuscule ou en miniscule :D

Code: Tout sélectionner

function CheckPremierCaractere($premier_caractere)
{
  if (!eregi('^[A-Z]+$',$premier_caractere)) {return 0;}
    else { return 1;}
}



rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Mer Déc 05, 2007 8:19

moi je ne pratique pas l'url rewrite mais cette formule me plait bien

RewriteEngine on
RewriteMap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^(.*)\.html$ ${lowercase:$1}.html [R=301,L]


j'ai remarqué que dans tes autres essais tu as viré la condition, as tu essayé celle ci sans la condition ?

philippe64
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 23 Juil 2004

Message le Mer Déc 05, 2007 9:04

KOogar a écrit:fait le en php, c'est vite fait !! ...


J'aimerai bien le faire en PHP, mais je me heurte à mon ignorance...
Je ne sais pas comment on fait pour faire un appel à une fonction PHP depuis le htaccess (sinon niveau PHP ça va, je vais savoir :wink: )

______

Pour répondre à rog,

J'ai bien sûr essayé avec la condition, mais c'est pareil.


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Mer Déc 05, 2007 9:52

Je ne sais pas comment on fait pour faire un appel à une fonction PHP depuis le htaccess


on peut pas, htacess c'est du perl

rog

philippe64
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 23 Juil 2004

Message le Mer Déc 05, 2007 14:17

Est-ce que quelqu'un sait si l'utilisation de "RewriteMap" nécessite un paramétrage spécial du serveur ?
Je précise que mod_rewrite est bien actif et que je n'ai pas d'autres soucis avec l'URL Rewriting.

J'ai posé la question à la personne qui gère mon hébergement, mais il ne sait pas.


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Mer Déc 05, 2007 20:39

pas tester mais je t'ai detailler le code. Place le en haut de ta page (header)
pas de code html avant.

Code: Tout sélectionner
<?php

// fonction qui test si le premier caratere est une majuscule ou minuscule
function CheckPremierCaractere($premier_caractere){
  if (!eregi('^[A-Z]+$',$premier_caractere)) {return 0;}
    else { return 1;}
}

// prend l'uri
$uri = $_SERVER["REQUEST_URI"];
// prend le premier caracterere (qui est placé en deuxieme car le premier est le '/'
$premier_caractere = $uri[1];
// si le premier caracterere est une Majuscule
if(CheckPremierCaractere($premier_caractere)) {
// passe l'uri en minuscule
$nouvelle_uri = strtolower($uri);
// la page est deplacée permanante
header("Status: 301 Moved Permanently");
// redirection avec l'uri en minuscule
header("Location: http://".$_SERVER['HTTP_HOST']."".$nouvelle_uri."");
}

?>

philippe64
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 23 Juil 2004

Message le Jeu Déc 06, 2007 10:19

Merci KOogar, j'ai finalement compris comment faire grâce à ton précédent message qui a fait 'Tilt' dans ma tête...

voici le .htaccess
Code: Tout sélectionner
RewriteEngine on
RewriteRule ^[A-Z]+.*\.html$ lowercase.php [L]

(il teste si la première lettre est une majuscule et si c'est le cas renvoie vers lowercase.php

Voici le fichier lowercase.php
Code: Tout sélectionner
<?php
// prend l'uri puis la converti en minuscule
$uri = $_SERVER['REQUEST_URI'];
$uri_lc = strtolower($uri);
// la page est redirigée (+deplacée permanente)
header("Location: http://".$_SERVER['HTTP_HOST'].$uri_lc,TRUE,301);
?>


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google goo.gl

  • Analyse de popularité
    Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
  • Transformer des simples citations de votre site en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités