Mon site (nouveau site qui viens d’être mis en ligne et n'a encore jamais fonctionné) génère des des erreur 500 a tous les visiteurs et les logs indique que cela est du a de trop nombreuse redirection. Cependant quand je l'ai développer en local sur mon PC avec wamp tous a fonctionner comme prévu (d’ailleurs les .test dans le fichier htaccess sont du a cela car je n'ai pas de ssl pour mes test en local).
je passe par des redirection (voir pièce jointe pour le detail) et le début du code (ajout du www et passage en https fonctionne comme prévu). Pour le dossier image et le fichier de javascript ils sont bien disponible en ligne. pour le fichier index.php (voir fichier joint) si je met directement le nom du fichier dans la bar d'adresse il est bien exécuté et me renvois à l'endroit prévu mais si je ne précise pas le nom du fichier cela ne fonctionne pas donc comment remédier à cela ?
ensuite j'ai un problème encore pire avec la lignes qui doit renvoyer vers pages.php car le script ne s’exécute jamais donc si quelqu'un peut m'aider sur les restriction des redirections je suis preneur d'informations.
la pièce jointe du code php n’étant pas passer voici sont contenu
<?php include('include/config.php'); //contien les defines de URL et LANGUE_DEFAUT
$fichier = fopen('index.txt', 'c+b'); //2ligne a suprimer apres les tests fwrite($fichier, 'TEST');
//listage des langues suportées include('include/lang/traduction.php'); $langues = array_keys($traduction);
//recupération et mise en forme de $_SERVER['HTTP_ACCEPT_LANGUAGE'] $langs = []; foreach (array_filter(array_map('trim', explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? ''))) as $part){ $pieces = array_map('trim', explode(';', $part)); $tag = strtolower($pieces[0]); $q = 1.0; if (isset($pieces[1]) && strpos($pieces[1], 'q=') !== false) { $q = (float) substr($pieces[1], strpos($pieces[1], 'q=') + 2); } //controle que q soit dans la plage 0...1 $q = max(0.0, min(1.0, $q)); $langs[] = ['tag' => $tag, 'q' => $q]; }
//trie par q décroisant, preserve l'odre original pour la meme valeur de q usort($langs, function($a, $b){ if ($a['q'] === $b['q']) return 0; return ($a['q'] > $b['q']) ? -1 : 1; });
//on traite langs par ordre jusqua trouver une langue gérée foreach ($langs as $entry){ $tag = $entry['tag']; if ($tag === '*'){ //aucune preférence donc on utilise la langue par default header('Location: '.URL.'/'.LANGUE_DEFAUT.'/'); exit; } if (in_array($tag, $langues, true)){ //corespondence exacte header('Location: '.URL.'/'.$tag.'/'); exit; } if (in_array(($tag = explode('-', $tag)[0]), $langues, true)){ //corespondance sans la preférence régionale header('Location: '.URL.'/'.$tag.'/'); exit; } } //aucune corespondance donc on utilise la langue par default header('Location: '.URL.'/'.LANGUE_DEFAUT.'/'); ?>
vu le contenu du fichier index.txt le code php commence à s'éxécuter mais par contre pour mon fichier pages.php il ne semble ne jamais s’exécuter (sauf si je tape à la mains le non du fichier mais dan ce cas la il considère que je suis sur une page invalide et renvoi sur l’accueil du site mais cela est normal car pages.php analyse le contenu de $_SERVER['REQUEST_URI'] et il prévu pour ce comporter comme cela si on l'appel directement)
Soit j'ai pas compris ce que vous souhaitez faire, soit vous avez un problème de design, là tel que présenté votre code du .htaccess renvoie en permanence sur /pages.php même si vous appelez déjà l'adresse https://www.example.fr/pages.php
dèja merci pour le site de test des fichier htaccess car je ne le connaissais pas
en aucun cas le visiteur doit avoir pages.php dans la barre d'adresse de son navigateur (j'ai fait le test de le mètre à la mains et la cela ne détecte pas la langue choisie par le visiteur et cela renvoi sur l'url d’accueil mais la page ne s'affiche pas)
Pour la sensibilité à la case j'ai bien prix cela en compte et j'ai que des majuscule dans mes URL