Aide pour URL Rewriting

WRInaute occasionnel
Bonjour,

Ayant modifié les pages de mon site, j'utilise l'URL rewriting pour rediriger les anciennes vers les nouvelles avec un R=301 pour les moteurs de recherche.

Maintenant, toutes mes pages sont en html. Avant, mon plan du site était "plan-du-site.php", maintenant, c'est "plan-du-site.html". Mais "plan-du-site.html" est une réécriture de "plan-du-site.php"....

Ce qui pose problème, c'est que l'ancienne page "plan-du-site.php" redirige vers "plan-du-site.html", qui est une réécriture de "plan-du-site.php"... ce qui fait une redirection en boucle !

Comment simplifier ça ?

Merci d'avance, Guillaume.
 
WRInaute passionné
il n'y a rien a simplifier car tu confonds redirection et rewritting.
dans le cas d'une redirection le serveur ne retour pas le contenu de la page mais une nouvelle adresse.
dans le cas du rewritting le serveur retour le contenu d'une autre page.
Donc si ca boucle, c'est qu'il y a deux redirections réciproques soit qu'il y a une redirection vers la page demandée.
 
WRInaute occasionnel
Ok, merci pour votre réponse.
Donc par exemple, si je veux faire rediriger index.html et index.php vers la racine, que mettre ?
J'ai essayé avec ça :
Code:
RewriteRule ^index.html http://www.monsite.com [R=301]
RewriteRule ^index.php http://www.monsite.com [R=301]
Mais ça plante...
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
 
WRInaute impliqué
Là tu a un cycle dans tes redirections car la racine est redirigée vers une des pages index.html ou index.php selon ta configuration.

Il y a deux chose à faire:
dire que le contenu qui doit etre affiché quand on est à la racine de ton site est différent de index.html et index.php,
et ensuite rediriger index.html et index.php vers cette page.

Donc fais les choses suivante. Renomme ta page index.php en info.php par exemple (n'importe quel nom convient).

Ensuite dit que c'est le contenu de info.php qui doit etre affiché par défaut. Pour cela il faut utiliser la commande DirectoryIndex. Mets cette ligne dans ton .htaccess:

Code:
DirectoryIndex info.php

alors -http://www.monsite.com affiche le contenu de http://www.monsite.com/info.php.

Ensuite les deux redirections que tu avais marchent (j'ai testé):

Code:
RewriteRule ^index.html http://www.monsite.com [R=301]
RewriteRule ^index.php http://www.monsite.com [R=301]

En effet, à chaque fois ce sera le contenu de info.php qui s'affichera.

Bref, il y a beaucoup d'autres choses que l'URL rewriting à notre disposition.
 
WRInaute passionné
la bonne syntaxe serait celle là :
Code:
RewriteRule ^index\.html$ http://www.monsite.com/ [R=301]
RewriteRule ^index\.php$ http://www.monsite.com/ [R=301]
sinon il y a la version php qui marche a tout les coups :
Code:
if ($_SERVER['REQUEST_URI'] == '/index.php') {
	header("Status: 301 Moved Permanently", false, 301);
	header("Location: /");
	exit;
}
 
WRInaute occasionnel
Merci pour vos réponses. J'ai pris la solution PHP, car l'utilisation de DirectoryIndex me liste le répertoire racine...
 
WRInaute impliqué
webmasterlamogere a dit:
la bonne syntaxe serait celle là :
Code:
RewriteRule ^index\.html$ http://www.monsite.com/ [R=301]
RewriteRule ^index\.php$ http://www.monsite.com/ [R=301]
sinon il y a la version php qui marche a tout les coups :
Code:
if ($_SERVER['REQUEST_URI'] == '/index.php') {
	header("Status: 301 Moved Permanently", false, 301);
	header("Location: /");
	exit;
}

Tes règles de réécriture bouclent chez moi...

Par ailleurs, le '.' dénotant n'importe quel caractère, il peut coder pour le caratère '.' !

Donc ma syntaxe marche :wink:
 
WRInaute impliqué
gcvoiron a dit:
Vap a dit:
gcvoiron a dit:
Merci pour vos réponses. J'ai pris la solution PHP, car l'utilisation de DirectoryIndex me liste le répertoire racine...

?? Tu avais renommé ta page index.php en info.php?
J'avais renommé mon index.php en index sans extension...

Ah, je commençais à me poser des questions.

Mais bon, si tu as résolu ton pb en PHP on peut clore cette discussion.

Edit: j'explique le problème. DirectoryIndex doit etre suivi par une ou plusieurs pages (url) valides. Si aucune des pages n'est disponible, il liste le contenu du répertoire.

Or "index" sans extension n'est pas un nom de page valide. Par defaut les extensions valides sont .html et .htm . En general, l'extension .php est ajoutée comme extension valide.

Donc, dans ton cas, DirectoryIndex n'étant pas suivi d'un nom de page valide, il liste le contenu du répertoire.
 
Discussions similaires
Haut