[resolu] Convertir une URL en minuscule

Nouveau WRInaute
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:
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:
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
 
WRInaute accro
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.
 
WRInaute accro
philippe64 a dit:
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
 
Nouveau WRInaute
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 ?
 
WRInaute accro
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:
function CheckPremierCaractere($premier_caractere) 
{ 
  if (!eregi('^[A-Z]+$',$premier_caractere)) {return 0;} 
    else { return 1;} 
}
 
WRInaute passionné
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 ?
 
Nouveau WRInaute
KOogar a dit:
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.
 
Nouveau WRInaute
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.
 
WRInaute accro
pas tester mais je t'ai detailler le code. Place le en haut de ta page (header)
pas de code html avant.

Code:
<?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."");
}

?>
 
Nouveau WRInaute
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:
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:
<?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);
?>
 
Discussions similaires
Haut