sandrinoo Posté 28 Septembre 2020 Posté 28 Septembre 2020 (modifié) Bonjour et bon hiver J'ai un serveur PHP Version 4.4.9 chez OVH en mutualisé et j'ai un petit problème dans mon htaccess en ce qui concerne l'url rewriting. Je voudrais redirigé toutes mes pages xxx.html vers /xxx/ (exemple /auto.html redirigé sur /auto/) avec ce code : #RedirectMatch 301 (.*)\.html$ https://www.domaine.com$1/ Ce dernier fonctionne très bien sauf pour la page d'index car il me la transforme en https://www.domaine.com/index/ J'aimerai bien évidemment simplement que la page d'index soit https://www.domaine.com Quelqu'un voit ? Modifié 28 Septembre 2020 par sandrinoo
Dan Posté 29 Septembre 2020 Posté 29 Septembre 2020 Hello, Il faut utiliser RewriteEngine pour cela,. J'ai ajouté la dernière ligne pour remplacer ton RedirectMatch RewriteEngine On RewriteRule ^/?index\.html$ / [R=301,L] RewriteRule ^/?(.*)/index\.html$ /$1/ [R=301,L] RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]
sandrinoo Posté 1 Octobre 2020 Auteur Posté 1 Octobre 2020 (modifié) Oui merci Dan, c'est exactement ce que je voulais, cela marche super. Maintenant, en réfléchissant, je me pose plein de questions... Je me dis que n'importe quoi tapé avec .html derrière me fait une 301 vers une 404. Exemple : nimportequoi.html > 301 > ca me crée une page /nimportequoi/ (avec une page blanche 404) 1/ pourquoi cette page 404 est blanche, est-elle une vraie 404 ? : n'y a-t-il pas moyen d'avoir une vraie 404 (et sans redirection 301 avant) 2/ pourquoi cette page blanche 404 n'est pas redirigée automatiquement par le errordocument 404.php du .htaccess ? 3/ la seule solution pour régler ces problèmes : lister dans le htaccess uniquement les pages à rediriger ? C'est un petit site et il y aurait 80 pages à rediriger mais est-lourd pour le htaccess ? 4/ A ce propos y-a-t-il moyen de placer un petit code dans le htacess pour mesurer la rapidité (comme on le fait en php avec "microtime") Vous voyez, ma petite tête est pleine de questions Bref qu'en pensez-vous Dan ? Merci d'avance si vous me répondez Modifié 1 Octobre 2020 par sandrinoo
Dan Posté 1 Octobre 2020 Posté 1 Octobre 2020 SI tu ne veux pas de redirection de "nimporte_quoi.html" vers "nimportequoi/", il suffit de supprimer la dernière ligne des règles, à savoir RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L] et il n'existe pas à ma connaissance, pour le fichier .htaccess, de code magique pour mesurer la rapidité !
sandrinoo Posté 1 Octobre 2020 Auteur Posté 1 Octobre 2020 Merci Dan, oui mais si j'enlève cette ligne les .html ne seront plus redirigés et ce n'est pas ce que je veux. En fait ce que j'aurais voulu : que mes vraies pages vraiespages.html soient redirigées sur les /vraiespages/ et que les pages tapées avec n'importequoi.html soient redirigées vers des 404. Visiblement c'est pas possible sauf si je tape dans le htaccess uniquement les 80 lignes pour les 80 pages à rediriger. Vous confirmez Dan ? Et vous pensez que c'est lourd à gérer 80 redirections de pages dans le .htaccess ou c pas grave ?
Dan Posté 1 Octobre 2020 Posté 1 Octobre 2020 Quelque-chose comme ceci, pour remplacer la dernière ligne ? RewriteCond %{REQUEST_URI} -f RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L] cela ne devrait réécrire l'URL que si le fichier *.html existe.
sandrinoo Posté 1 Octobre 2020 Auteur Posté 1 Octobre 2020 Merci Dan mais ça ne fonctionne pas : les vraies (et les fausses) .html vont vers la errordocument 404...
Dan Posté 1 Octobre 2020 Posté 1 Octobre 2020 Tu as bien remplacé la dernière ligne ? RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]
sandrinoo Posté 1 Octobre 2020 Auteur Posté 1 Octobre 2020 (modifié) En tout moi j'ai testé ça de mon côté : RewriteRule ^/?index\.html$ / [R=301,L] RewriteRule ^/?(.*)/index\.html$ /$1/ [R=301,L] RewriteCond %{REQUEST_URI} -f RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L] Modifié 1 Octobre 2020 par sandrinoo
Dan Posté 1 Octobre 2020 Posté 1 Octobre 2020 Essaie ceci : RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f RewriteRule ^/?(.*)\.html$ /$1/ [R=301,L]
sandrinoo Posté 1 Octobre 2020 Auteur Posté 1 Octobre 2020 Ca ne marche pas non plus. Mais je crois que je te demande l'impossible Dan car : pour être plus claire, ces fichiers .html n'existent plus (ils existaient avant la refonte de mon site, générés par l'ancien .htaccess). Mais je tiens à les récupérer car mes backlinks externes qui pointent vers mon site sont en .html
sandrinoo Posté 8 Octobre 2020 Auteur Posté 8 Octobre 2020 Du coup, comme j'ai pas eu de réponse, je sais pas si c possible :( Pour être plus claire, simplement : - avant mon .htaccess générait des urls en .html (url.html) - maintenant, après refonte, mon .htaccess génère des urls avec slash (/url/) et donc plus du tout de .html Voici ce que j'aurais aimé avoir : - les urls.html redirigés (en 301) UNIQUEMENT sur mes /urls/ qui existent (200) = pour récupérer les backlinks - MAIS les urls.html directement en 404 (sans passer par une 301 avant), dont les /urls/ n'existeraient pas en 200. Le problème est qu'actuellement, n'importe quel url.html tapée finit sur /url/. Et moi j'aurais voulu que les mauvaises urls html soit directement des 404. Le seul moyen que j'ai trouvé est d'écrire une par une, dans le htaccess, toutes les bonnes urls concernées, mais y-a-il un moyen moins rébarbatif ? Htaccess, php ? Sachant que je suis en Mutu chez Ovh. Dan, Désolée de revenir à la charge mais cette question occupe mon esprit...
Dan Posté 9 Octobre 2020 Posté 9 Octobre 2020 Quelle était la règle que tu utilisais avant, pour convertir toutes tes URLs en *.html ? C'étaient à l'origine des fichiers .php ou un autre format ?
sandrinoo Posté 9 Octobre 2020 Auteur Posté 9 Octobre 2020 Bonjour Dan, merci de me répondre : oui ce sont des fichiers php à la base. Mon ancienne règle pour les url.html était : RewriteRule ^(.*)\.html$ /cat.php?cat=$1 [L] Ma nouvelle règle pour les /url/ est maintenant : RewriteRule ^(.*)/$ /cat.php?cat=$1 [L]
Dan Posté 9 Octobre 2020 Posté 9 Octobre 2020 Le problème est qu'on ne peut pas tester si un fichier existe ou non au format .php, vu que toutes tes URLs sont redirigées au départ de cat.php, qui existe toujours ! Et de même, les fichiers .html n'ont aucune existence réelle ! Comment veux-tu alors vérifier si une /url/ existe ou non ? Donc, tu vas devoir faire ligne par ligne dans ton .htaccess. Une centaine de lignes, ce n'est pas bien grave !
Dan Posté 9 Octobre 2020 Posté 9 Octobre 2020 Une alternative serait d'éditer le script cat.php pour renvoyer vers une 404 en cas de non-existence !
sandrinoo Posté 9 Octobre 2020 Auteur Posté 9 Octobre 2020 1/ Oui c'est exactement ce que je pensais, on peut pas tester l'existence. Mais je posais la question, on sait jamais... Je vais tenter de mettre dans le haut de mon fichier php une condition du style si $var.html n'existe pas > 404 Merci Dan. 2/ Par ailleurs, une dernière question que je me suis toujours posée, en lien avec ça : Dans mon .htaccess j'ai un "ErrorDocument 404 /404.php" qui fonctionne très bien (en redirigeant les 404 vers ma propre page 404.php) sauf pour : /fausse_url/ C'est bien une 404, mais elle n'est pas redirigée vers la page 404.php (ca me donne sous firefox une page blanche, et sous chrome la 404 de chrome). C'est peut être que j'oublie un truc dans ma règle de réécriture non ? : RewriteRule ^(.*)/$ /cat.php?cat=$1 [L]
Dan Posté 9 Octobre 2020 Posté 9 Octobre 2020 Il faut que ta ligne ErrorDocument soit au tout début de ton fichier .htaccess pour que cette règle soit enregistrée par Apache. C'est à dire : avant toute règle de réécriture. Dans le cas contraire, le flag [L] fait sortir du .htaccess, donc si le ErrorDocument se trouve après, il n'est pas lu !
sandrinoo Posté 9 Octobre 2020 Auteur Posté 9 Octobre 2020 Ah d'accord ! oui c logique en plus. Mais non visiblement rien n'y fait Dan, j'ai placé ErrorDocument 404 /404.php en haut du fichier .htaccess tout en haut : - test avant Options +FollowSymlinks et RewriteEngine on - et test apres Options +FollowSymlinks et RewriteEngine on En prenant soin de vider cache à chaque fois : firefox toujours page blanche et chrome, 404 de chrome ;(
Dan Posté 9 Octobre 2020 Posté 9 Octobre 2020 Assure-toi que AllowOverride est défini à FileInfo ! https://httpd.apache.org/docs/2.4/fr/custom-error.html#page-header
sandrinoo Posté 9 Octobre 2020 Auteur Posté 9 Octobre 2020 Je viens de finir mon Dahl de lentilles :) dsl Dans mon fichier phpinfo pas d'AllowOverride ! Ca doit être pour ça. Pas moyen de l'activer par une procédure ? (rappel : mutu chez ovh)
Dan Posté 9 Octobre 2020 Posté 9 Octobre 2020 Ce n'est pas dans le phpinfo, mais dans la config d'apache !
sandrinoo Posté 9 Octobre 2020 Auteur Posté 9 Octobre 2020 (modifié) Ou voir cette config d'Apache en mutu chez OVH ? De toute façon, je n'ai pas le droit de la modifier en mutualisé, il me semble ? Modifié 9 Octobre 2020 par sandrinoo
Dan Posté 9 Octobre 2020 Posté 9 Octobre 2020 Regarde les logs d'erreur apache. Si tu n'as pas AllowOverride FileInfo, cela doit générer une erreur ! Essaie en mettant ceci : ErrorDocument 404 http://www.tonsite.com/404.php Il est possible que les mutus OVh n'acceptent que cette forme !
sandrinoo Posté 9 Octobre 2020 Auteur Posté 9 Octobre 2020 Bon ben j'ai tenté avec ErrorDocument 404 http://www.tonsite.com/404.php en haut de fichier, mais c'est exactement la même chose (et puis ça ne me conviendrait pas car ça génère une 302 avant la 404). Pas de trace non plus de AllowOverride FileInfo dans mes logs d'Apache (mais j'ai encore pas ceux d'aujourd'hui, je les aurais demain mais je doute, j'irais voir lundi à tout hasard). En fait je pense que c'est pas possible avec mon serveur. Merci encore pour ta patience Dan et d'être toujours là quand j'en ai besoin ! Te souhaite un excellent W-E !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant