Jump to content

Redirection 301 .html sur repertoire (sauf index)


Recommended Posts

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 ?

Edited by sandrinoo
Link to post
Share on other 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]

 

Link to post
Share on other sites
Posted (edited)

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

 

 

 

Edited by sandrinoo
Link to post
Share on other 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é !

Link to post
Share on other 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 ?

Link to post
Share on other 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.

 

Link to post
Share on other sites

Tu as bien remplacé la dernière ligne ?

RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]
Link to post
Share on other sites
Posted (edited)

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]

 

Edited by sandrinoo
Link to post
Share on other sites

Essaie ceci :

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

 

 

Link to post
Share on other 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

Link to post
Share on other 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...

Link to post
Share on other 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 ?

 

 

 

Link to post
Share on other 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]

 

 

Link to post
Share on other 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 !

 

Link to post
Share on other sites

Une alternative serait d'éditer le script cat.php pour renvoyer vers une 404 en cas de non-existence !

 

Link to post
Share on other 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]

 

Link to post
Share on other 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 !

 

 

Link to post
Share on other 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 ;(

Link to post
Share on other sites

Je viens de finir mon Dahl de lentilles :) dsl

 

Dans mon fichier phpinfo pas d'AllowOverride !

Ca doit être pour ça.

 

Pas moyen de l'activer par une procédure ? (rappel : mutu chez ovh)

Link to post
Share on other sites

Ce n'est pas dans le phpinfo, mais dans la config d'apache !

 

Link to post
Share on other sites
Posted (edited)

Ou voir cette config d'Apache en mutu chez OVH ?

De toute façon, je n'ai pas le droit de la modifier en mutualisé, il me semble ?

Edited by sandrinoo
Link to post
Share on other 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 !

 

Link to post
Share on other 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 !

 

 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...