Enlever les .html: Tirage dans le pied ?

WRInaute discret
J'ai toujours trouvé les url finissant en .html ou .php ou .truc moches et inutiles, bref, indésirables. Donc, ni une, n'hideux, je mets cette règle dans mon .htaccess:
Code:
RewriteRule ^([^.]*)([^/])$ /$1$2.html
Et change tous mes liens générés (ceux de navigation en fait)
C'est un site à fort PR, et j'ai peur d'avoir fait une connerie, ça me duplique le contenu ça non ? Et si je mets un R=301, c'est l'url avec .html au bout qui est affichée et retenue par les moteurs, c'est l'inverse que je voudrais faire. Qqun a une idée ?

Heuh, le site c'est -http://www.esterel-technologies.com
 
WRInaute passionné
Ils existent physiquement ces fichier .html ?
Si c'est le cas, oui, c'est du contenu dupliqué.
:(
 
WRInaute discret
Hélas oui. Est-ce qu'un truc comme ça marcherait:
1. Je renomme tous mes .html en .php (il se trouve que c'est du php, donc pourquoi pas)
2. Je cascade 2 règles:
Code:
RewriteRule ^(.*).html$ /$1 [R=301]
RewriteRule ^([^.]*)([^/])$ /$1$2.php
Du coup la première me fait bien un 301 vers l'URL bien écrite, la deuxième me fait la redirection vers l'url physique.
 
WRInaute passionné
Tu peux tester cela aussi


Code:
## REDIRECTION ##
RedirectMatch 301 ^(.*)\.html$ http://www.example.com/$1

## REECRITURE ##
RewriteRule ^/(.*)$ /$1.php [L]
 
WRInaute discret
Effectivement, ceci fonctionne bien chez moi:

Code:
## REDIRECTION ##
RedirectMatch 301 ^/plonk\.html$ /plonk
## REECRITURE ##
RewriteRule ^plonk$ /plonk.php [L]

Y'a plus qu'a, merci !
 
WRInaute passionné
De nada. Fais attention à la deuxième clause, elle risque aussi de faire une boucle en fonction de ta regexp.
 
WRInaute discret
Si ca peut servir à d'autres, j'ai fait un petit script qui vérifie qu'il n'y a pas de conflit avant de renommer des .hml en .php

Code:
#!/bin/bash
count=0
for f in $(find . -name "*.html")
do
p=$(dirname $f)/$(basename $f html)php
[ -f $p ] && echo "conflict $p / $f" || count=$(($count +1))
done
echo "$count files ok"

$bash check.sh
conflict ./forum/lang/English/index.php / ./forum/lang/English/index.html
418 files ok
Une fois les conflits résolus, on peut y aller bourrin:

Code:
#!/bin/bash
for f in $(find . -name "*.html")
do
p=$(dirname $f)/$(basename $f html)php
mv $f $p
done
 
Discussions similaires
Haut