Aller au contenu

Redirection 301 .html sur repertoire (sauf index)


Sujets conseillés

Bonjour et bon hiver :)

 

J'ai un serveur PHP Version 4.4.9 chez OVH en mutualisé et j'ai un petit problème dans mon htaccess en ce qui concerne l'url rewriting.

 

Je voudrais redirigé toutes mes pages xxx.html vers /xxx/ (exemple /auto.html redirigé sur /auto/) avec ce code :

 

#RedirectMatch 301 (.*)\.html$ https://www.domaine.com$1/

 

Ce dernier fonctionne très bien sauf pour la page d'index car il me la transforme en https://www.domaine.com/index/

 

J'aimerai bien évidemment simplement que la page d'index soit https://www.domaine.com

 

Quelqu'un voit ?

Modifié par sandrinoo
Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

Il faut utiliser RewriteEngine pour cela,.

J'ai ajouté la dernière ligne pour remplacer ton RedirectMatch;)

 

RewriteEngine On
RewriteRule ^/?index\.html$ / [R=301,L]
RewriteRule ^/?(.*)/index\.html$ /$1/ [R=301,L]
RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]

 

Lien vers le commentaire
Partager sur d’autres sites

Oui merci Dan, c'est exactement ce que je voulais, cela marche super.

 

Maintenant, en réfléchissant, je me pose plein de questions...

Je me dis que n'importe quoi tapé avec .html derrière me fait une 301 vers une 404. Exemple :

 

nimportequoi.html > 301 > ca me crée une page /nimportequoi/ (avec une page blanche 404)

 

1/ pourquoi cette page 404 est blanche, est-elle une vraie 404 ? : n'y a-t-il pas moyen d'avoir une vraie 404 (et sans redirection 301 avant)

2/ pourquoi cette page blanche 404 n'est pas redirigée automatiquement par le errordocument 404.php du .htaccess ?

3/ la seule solution pour régler ces problèmes : lister dans le htaccess uniquement les pages à rediriger ? C'est un petit site et il y aurait 80 pages à rediriger mais est-lourd pour le htaccess ?

4/ A ce propos y-a-t-il moyen de placer un petit code dans le htacess pour mesurer la rapidité (comme on le fait en php avec "microtime")

 

Vous voyez, ma petite tête est pleine de questions :)

 

Bref qu'en pensez-vous Dan ?

Merci d'avance si vous me répondez

 

 

 

Modifié par sandrinoo
Lien vers le commentaire
Partager sur d’autres sites

SI tu ne veux pas de redirection de "nimporte_quoi.html" vers "nimportequoi/", il suffit de supprimer la dernière ligne des règles, à savoir

 

RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]

 

et il n'existe pas à ma connaissance, pour le fichier .htaccess, de code magique pour mesurer la rapidité !

Lien vers le commentaire
Partager sur d’autres sites

Merci Dan,

 

oui mais si j'enlève cette ligne les .html ne seront plus redirigés et ce n'est pas ce que je veux.

En fait ce que j'aurais voulu : que mes vraies pages vraiespages.html soient redirigées sur les /vraiespages/ et que les pages tapées avec n'importequoi.html soient redirigées vers des 404.

 

Visiblement c'est pas possible sauf si je tape dans le htaccess uniquement les 80 lignes pour les 80 pages à rediriger.

 

Vous confirmez Dan ?

 

Et vous pensez que c'est lourd à gérer 80 redirections de pages dans le .htaccess ou c pas grave ?

Lien vers le commentaire
Partager sur d’autres sites

Quelque-chose comme ceci, pour remplacer la dernière ligne ?

 

RewriteCond %{REQUEST_URI} -f
RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]

 

cela ne devrait réécrire l'URL que si le fichier *.html existe.

 

Lien vers le commentaire
Partager sur d’autres sites

En tout moi j'ai testé ça de mon côté :

RewriteRule ^/?index\.html$ / [R=301,L]
RewriteRule ^/?(.*)/index\.html$ /$1/ [R=301,L]
RewriteCond %{REQUEST_URI} -f
RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]

 

Modifié par sandrinoo
Lien vers le commentaire
Partager sur d’autres sites

Ca ne marche pas non plus. Mais je crois que je te demande l'impossible Dan car :

 

pour être plus claire, ces fichiers .html n'existent plus (ils existaient avant la refonte de mon site, générés par l'ancien .htaccess).

Mais je tiens à les récupérer car mes backlinks externes qui pointent vers mon site sont en .html

Lien vers le commentaire
Partager sur d’autres sites

Du coup, comme j'ai pas eu de réponse, je sais pas si c possible :(

 

Pour être plus claire, simplement :

- avant mon .htaccess générait des urls en .html (url.html)
- maintenant, après refonte, mon .htaccess génère des urls avec slash (/url/) et donc plus du tout de .html

 

Voici ce que j'aurais aimé avoir :

- les urls.html redirigés (en 301) UNIQUEMENT sur mes /urls/ qui existent (200) = pour récupérer les backlinks
- MAIS les urls.html directement en 404 (sans passer par une 301 avant), dont les /urls/ n'existeraient pas en 200.

 

Le problème est qu'actuellement, n'importe quel url.html tapée finit sur /url/. Et moi j'aurais voulu que les mauvaises urls html soit directement des 404.

 

Le seul moyen que j'ai trouvé est d'écrire une par une, dans le htaccess, toutes les bonnes urls concernées, mais y-a-il un moyen moins rébarbatif ? Htaccess, php ? Sachant que je suis en Mutu chez Ovh.


Dan, Désolée de revenir à la charge mais cette question occupe mon esprit...

Lien vers le commentaire
Partager sur d’autres sites

Quelle était la règle que tu utilisais avant, pour convertir toutes tes URLs en *.html ?

C'étaient à l'origine des fichiers .php ou un autre format ?

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Dan, merci de me répondre : oui ce sont des fichiers php à la base.

 

Mon ancienne règle pour les url.html était :

RewriteRule ^(.*)\.html$ /cat.php?cat=$1 [L]

 

Ma nouvelle règle pour les /url/ est maintenant :

RewriteRule ^(.*)/$ /cat.php?cat=$1 [L]

 

 

Lien vers le commentaire
Partager sur d’autres sites

Le problème est qu'on ne peut pas tester si un fichier existe ou non au format .php, vu que toutes tes URLs sont redirigées au départ de cat.php, qui existe toujours ! Et de même, les fichiers .html n'ont aucune existence réelle !

 

Comment veux-tu alors vérifier si une /url/ existe ou non ?

 

Donc, tu vas devoir faire ligne par ligne dans ton .htaccess. Une centaine de lignes, ce n'est pas bien grave !

 

Lien vers le commentaire
Partager sur d’autres sites

1/ Oui c'est exactement ce que je pensais, on peut pas tester l'existence. Mais je posais la question, on sait jamais...

Je vais tenter de mettre dans le haut de mon fichier php une condition du style si $var.html n'existe pas > 404

Merci Dan.

 

2/ Par ailleurs, une dernière question que je me suis toujours posée, en lien avec ça :

 

Dans mon .htaccess j'ai un "ErrorDocument 404 /404.php" qui fonctionne très bien (en redirigeant les 404 vers ma propre page 404.php) sauf pour : /fausse_url/

 

C'est bien une 404, mais elle n'est pas redirigée vers la page 404.php (ca me donne sous firefox une page blanche, et sous chrome la 404 de chrome). C'est peut être que j'oublie un truc dans ma règle de réécriture non ?  :

 

RewriteRule ^(.*)/$ /cat.php?cat=$1 [L]

 

Lien vers le commentaire
Partager sur d’autres sites

Il faut que ta ligne ErrorDocument soit au tout début de ton fichier .htaccess pour que cette règle soit enregistrée par Apache.

C'est à dire : avant toute règle de réécriture.

 

Dans le cas contraire, le flag [L] fait sortir du .htaccess, donc si le ErrorDocument se trouve après, il n'est pas lu !

 

 

Lien vers le commentaire
Partager sur d’autres sites

Ah d'accord ! oui c logique en plus.

Mais non visiblement rien n'y fait Dan, j'ai placé ErrorDocument 404 /404.php en haut du fichier .htaccess tout en haut :

 

- test avant Options +FollowSymlinks et RewriteEngine on

- et test apres Options +FollowSymlinks et RewriteEngine on

 

En prenant soin de vider cache à chaque fois : firefox toujours page blanche et chrome, 404 de chrome ;(

Lien vers le commentaire
Partager sur d’autres sites

Regarde les logs d'erreur apache. Si tu n'as pas AllowOverride FileInfo, cela doit générer une erreur !

 

Essaie en mettant ceci :

ErrorDocument 404 http://www.tonsite.com/404.php

 

Il est possible que les mutus OVh n'acceptent que cette forme !

 

Lien vers le commentaire
Partager sur d’autres sites

Bon ben j'ai tenté avec ErrorDocument 404 http://www.tonsite.com/404.php en haut de fichier, mais c'est exactement la même chose (et puis ça ne me conviendrait pas car ça génère une 302 avant la 404).

 

Pas de trace non plus de AllowOverride FileInfo dans mes logs d'Apache

(mais j'ai encore pas ceux d'aujourd'hui, je les aurais demain mais je doute, j'irais voir lundi à tout hasard).

 

En fait je pense que c'est pas possible avec mon serveur.

 

Merci encore pour ta patience Dan et d'être toujours là quand j'en ai besoin !

Te souhaite un excellent W-E !

 

 

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...