Url Rewriting : La boucle sans fin de la mort.

Nouveau WRInaute
Bonjour !

Mon souci semble un problème courant, mais je n'ai pas trouvé de réponse définitive dans les forums jusqu'à présent.

Je réécris les pages machin.html en pages php?var=xxx et je souhaite que Google, qui connait déjà les pages php, ne les référence plus mais indexe plutôt leur équivalent html, censé être désormais l'accès "public" du site.

Prenons un exemple simple sans variables (et qui bien sûr ne marche pas !) :

Code:
RewriteEngine On
RewriteBase /

RewriteRule	^index\.html$ /index\.php [L]
RewriteRule	^index\.php$ http://domaine\.com/index\.html [R=301,L]

A première vue, j'imagine qu'un appel à index.html sera donc réécrit en index.php et le traitement s'arrêtera là. Tandis qu'un appel à index.php sera renvoyé définitivement vers index.html dans un premier temps, puis réécrit en index.php et ça s'arrêtera là toujours grâce au flag [L] de la première ligne.

Oui mais voilà, ça marche pas. On dirait que le flag [L] n'est pas pris en compte. A l'appel de l'une ou l'autre des pages j'entre dans une boucle de redirections sans fin. J'ai l'impression d'avoir tout essayé, rien n'y fait (en changeant l'ordre des règles, en supprimant l'appel via -http://domaine.com, etc...).

Pourtant, sur un code aussi simple avec deux pages, ça devrait pas être trop compliqué, hein ? :( L'UR elle-même fonctionne à merveille, c'est juste "l'UR inversé" qui pose un problème et me coûte mes derniers cheveux.

Je sais bien que je peux aussi interdire à Google d'indexer les pages .php dans le fichier robots.txt, mais je n'ai pas envie de perdre le bénéfice du référencement et le pr des pages, donc je tiens à ce que le robot sache que ce sont bien toujours les mêmes pages...

Quelqu'un aurait une idée ?

Merci !
 
WRInaute occasionnel
personellement je conseille de rajouter un paramètre au php découlant du html et de faire une redirection dans le php uniquement si ce paramètre est présent avec header(...).

.htaccess
Code:
RewriteEngine On
RewriteBase /

RewriteRule	^index\.html$ /index\.php?rewrite=1 [L]

PHP
Code:
if ($rewrite!=1) {
    header("301 etc...");
    header("Location etc...");
}

[edit] $rewrite!=1
 
Nouveau WRInaute
En fait mon problème est inverse : l'appel du html et sa réécriture en php marche bien, mais le problème est lorsqu'on appelle directement la page php... c'est là que je voudrais faire une redirection permanente vers la page html sans entrer dans une boucle sans fin lors de la ré-réécriture en php. Je pense que si seulement le flag [L] faisait son boulot chez moi, ça devrait marcher, non ? :(

Ou alors j'ai raté quelque chose dans ton code :)

Merci en tout cas !
 
Nouveau WRInaute
Bon, je me réponds tout seul, ça pourra aider du monde :

la solution consiste à passer une variable à la première réécriture et à ne procéder à la seconde que si cette variable n'est pas mise.

Ex :
Code:
RewriteRule	^index\.html$ /index.php [L,E=OK:1]

RewriteCond %{ENV:REDIRECT_OK} !=1
RewriteRule	^index\.php$ /index\.html [R=301]

Tout le secret était de savoir qu'on peut passer des variables d'un appel à l'autre...
 
WRInaute discret
Re:

ça a résolu également mon problème, mais je ne comprends pas le lien entre

RewriteRule ^index\.html$ /index.php [L,E=OK:1]
# et
RewriteCond %{ENV:REDIRECT_OK} !=1
RewriteRule ^index\.php$ /index\.html [R=301]
 
WRInaute discret
apres quelques recherche, j'ai trouvé :


RewriteRule ^index\.html$ /index.php [L,E=maVar:1]

RewriteCond %{ENV:REDIRECT_maVar} !=1
RewriteRule ^index\.php$ /index\.html [R=301]
 
Discussions similaires
Haut