Redirection infinie

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour

j'ai mis .htaccess mais je ne sais pas si le problème vient réellement du .htaccess ou de l'arborescence du site… ou des deux.

mon code .htaccess est à peu près dans ce format :

1
2
3
4
RewriteRule ^([a-z-]+)$ /$1.html [L]
RewriteRule ^([a-z-]+)/([a-z-]+)$ /$1/$2.html [L]
RewriteRule ^([a-z-]+)/$ /$1 [R=301,L]
RewriteRule ^([a-z-]+)/([a-z-]+)/$ /$1/$2 [R=301,L]

en gros si le fichier que veut l'utiliser est "/azerty" le site lui affiche "/azerty.html" si le fichier que veut l'utiliser est "/123/azerty" le site lui affiche "/123/azerty.html"

le problème est que ça me retourne une erreur, à cause d'une redirection qui ne se complétera pas selon Firefox

en regardant d'un peu plus prêt les entêtes des réponses HTTP je vois :

"/azerty" me redirige vers "/azerty/" - pas normal

"/azerty/" me redirige vers "/azerty" - normal

sauf que ça fait une boucle et c'est sûrement ce qui fait planter le truc.

Le problème est que le dossier "/azerty/" existe vraiment, ce qui est vrai pour tous les fichiers… chaque fichier à la racine dispose d'un dossier correspondant (c'est un site bizarre).

si je renomme le dossier "/azerty/" en "/azerty1/" ça marche.

mais comme je ne peux pas mettre en place cette solution, sauf vraiment en dernier recours, je me demandais s'il n'était pas possible de résoudre le problème autrement.

par exemple quand je renomme le dossier "/azerty/" en "/azerty1/" et que je demande le fichier "/azerty", l'entête de ma réponse HTTP ne me donne plus une redirection mais un "200 ok".

Et c'est bien la page "/azerty.html" qui est affichée.

Donc vraisemblablement il y a deux cas de figures : 1. le dossier "/azerty/" existe -> l'utilisateur est redirigé vers ce dossier s'il demande le fichier "/azerty" 2. il n'existe pas -> pas de redirection, tout fonctionne

N'y a-t-il pas moyen de forcer Apache à se comporter comme dans le cas 2 ?

merci !

+0 -0

J'ai déjà remarqué se problème, surtout quand je faisais des API et que j'avais un dossier qui se nommais la même chose.

Je n'ai jamais vraiment trouvé (ni cherché) de solution. je me suis contenter d'appeler mon dossier _api.

+0 -0

C'est Apache qui ajoute automatiquement un slash si le répertoire existe (rechercher « apache disable automatic add slash », on trouve ça). Perso ce que je faisais, c'était rediriger toutes les requêtes vers un script et les traiter avec, au lieu d'essayer de faire avec le htaccess. Tu ne gères qu'un niveau d'imbrication pour les dossiers ?

edit : et du coup tes pages ont deux urls, une avec html et une sans ? Il faudrait renvoyer le ".html" sur le sans avec 301, non ?

Édité par blo yhg

+0 -0
Auteur du sujet

merci pour le lien, c'était ce que je cherchais

il y a plusieurs niveaux d'imbrication, c'est pour ça que je voulais une solution automatique sans avoir à changer les noms de dossiers manuellement

edit : et du coup tes pages ont deux urls, une avec html et une sans ? Il faudrait renvoyer le ".html" sur le sans avec 301, non ?

je pense que c'est ce que je vais faire, ou au pire interdire aux moteurs d'indexer la page ".html" devrait suffire

merci !

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte