Bloquer l'URL canonique sur une URL virtuelle

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

Craym
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 4
Inscription: 3 Déc 2010

Bloquer l'URL canonique sur une URL virtuelle

Message le Ven Déc 03, 2010 12:20

Bonjour !

Ce la fait quelques jours que je cherche la solution à mon problème et pas moyen de trouver quelque chose qui fonctionne. J'en viens à vous demander votre aide car j'ai l'impression d'avoir tout essayé ! :?

J'explique mon problème :
Sur mon site, tous les fichiers sont des ".php" physiquement présent sur le serveur. Je souhaite pourvoir y accéder via une page .html.

Pour ça pas de problème, une règle possible est :
Code: Tout sélectionner
RewriteRule (.+)\.html(.*) $1.php$2 [L]


Cela deviens plus difficile lorsque je souhaite "bloquer" les URL sur l'extension .html c'est à dire que si je reçoit une URL avec un .php, je souhaite faire une redirection 301 sur la même page mais avec l'extension en .html. Celle ci sera ensuite réécrite par le module pour afficher la page .php

Mon code donne alors :
Code: Tout sélectionner
RewriteRule (.+)\.php(.*)  http://www.site.com/$1.html$2 [R=301]
RewriteRule (.+)\.html(.*) $1.php$2 [L]


Problème : lorsque j'entre une URL .php, jai bien une redirection et mon navigateur va bien demander la même page en .html.
Le module compare la première règle qui est fausse donc continue puis tombe sur la règle de l'html. Il réécrit donc l'URL mais réévalue ensuite tous le fichier ! :| Ce qu'il fait qu'il retombe dans la 1ere règle et donc redirige sur le .html... etc... et ça boucle !
Cela même avec le drapeau [L] ou n'importe quel autre drapeau. J'ai bien essayé des conditions en tout genre mais pas moyen de l'empêcher de réévaluer la nouvelle URL html une fois qu'il l'a réécrite...

Auriez vous une idée pour résoudre ce problème ?

D'avance merci !

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Re: Bloquer l'URL canonique sur une URL virtuelle

Message le Ven Déc 03, 2010 12:59

En inversant les 2 règles ? 404 ?

SInon le plus simple est de faire un 301 vers .html directement dans la page PHP si la REQUQEST_URI est en .php

Craym
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 4
Inscription: 3 Déc 2010

Re: Bloquer l'URL canonique sur une URL virtuelle

Message le Ven Déc 03, 2010 15:21

Si on inverse les deux règles, il va d'abord réécrire l'URL .html en .php (si elle ne l'est pas déjà) puis va effectuer la redirection 301 ce qui va provoquer le rechargement de la page et donc la ré-exécution du .htaccess. On va donc avoir une belle boucle. :(

Tout cela parce que le script ne "respecte" pas le drapeau [L]... :x
C'est vraiment bizzare qu'il ne le respecte pas. Même si je lui ajoute un [NS] pour éviter les sous-requête, cela ne change rien. Il ré-exécute le script complet à la fin de la réécriture... :?:

Pour ce qui est de la redirection .php, si je pouvais éviter de mélanger réécriture et contenu, ce serait bien. Si je peux tout faire d'un même endroit c'est bien plus simple à gérer. Même si cette solution est tout à fait viable et que je m'y résignerais si aucune solution n'est trouvée.

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Re: Bloquer l'URL canonique sur une URL virtuelle

Message le Ven Déc 03, 2010 17:27

t'as essayé avec un redirect permanent ?

et avec un RewriteCond %{REQUEST_URI}

Craym
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 4
Inscription: 3 Déc 2010

Re: Bloquer l'URL canonique sur une URL virtuelle

Message le Ven Déc 03, 2010 21:25

J'ai testé tes différentes propositions. Toujours pareil, le fichier se recharge et fait tout planter.
Même si je mets des conditions :
Code: Tout sélectionner
RewriteCond %{REQUEST_URI} \.php

J'ai bien testé dans tous les sens possibles mais en vain. J'ai aussi essayé avec un skip [S=1] pour sauter l'une ou l'autre des instructions selon le cas mais rien n'y fait... :cry:
Testé aussi avec des
Code: Tout sélectionner
RewriteCond %{IS_SUBREQ} false
pour essayer d'éviter le bug en cas de sous requête dans un sens ou dans l'autre toujours pareil...

J'ai aussi essayé de passer par un fichier externe qui lui effectue une redirection 301 sur la bonne page en html pour essayer de contrer le rechargement de la page en comparant les différents HTTP_REFERER mais il semblerait que la page qui effectue la redirection ne soit pas pris en compte et donc retour point de départ.

Plus je teste et plus je trouve tout cela étrange...


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 :

  • Liste des backlinks
    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 textes non cliquables 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 1 invité