Menu

[HTACCESS] redirection des erreurs 404 [Fermé]

Messages postés
227
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
29 mai 2019
- - Dernière réponse : [Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
- 24 avril 2018 à 11:07
Afin de rediriger les erreurs 404, j'utilise le code suivant dans un fichier .htaccess

ErrorDocument 404 /errors/404.php


De plus, pour interdire l'accès à mes fichiers, au lieu de

Deny From All


Je préfère utiliser une redirection, tel que

Redirect /repertory/ /404/


/404/
est un répertoire qui n'éxiste pas, et donc qui renvoie une erreur 404.
Et ce, afin d'empêcher l'accès à mes fichiers.

Mon problème est le suivant :

Lorsque je tape une url composée de plusieurs répertoires comme "http://mondomaine.com/rep1/rep2/rep3/..."
Ma redirection renvoie une url tel que : "http://mondomaine.com/404/rep1/rep2/rep3/..."

Ce qui empêche mes sources (css, images, etc...) de pouvoir être utilisées avec un chemin relatif.

Je souhaiterais savoir s'il est possible d'opérer une redirection sans garder le chemin complet.

Exemple :

Au lieu de :
ce chemin "http://mondomaine.com/rep1/rep2/rep3/..."
qui devient "http://mondomaine.com/404/rep1/rep2/rep3/..."

Je souhaite :
ce chemin "http://mondomaine.com/rep1/rep2/rep3/..."
qui devient "http://mondomaine.com/404/"

Et donc une redirection vers une url fixe.

Merci d'avance pour vos réponses et votre participation.

Afficher la suite 

2 réponses

Messages postés
227
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
29 mai 2019
4
0
Merci
J'ai trouvé une partie de la solution :

Pour les cas ou le répertoire et connu et où une règle existe tel que :

Redirect /repertory/ /404/


La completer tel que :

Redirect /repertory/ /404/?z=


Change le chemin en variable $_GET et permet l'utilisation de chemins relatifs dans tous les répertoires connus.

Malheureusement,

si c'est une url dont le répertoire est inconu, le problème reste le même...
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785
0
Merci
Salut electroking,

Bien que tu ne mentionnes pas, je comprends que tu utilises Apache et je te propose de rediriger ton message sur le forum Linux.

Je ne pense pas que cela soit une bonne idée de faire ce que tu fais, car (1) ton site va "mentir" au navigateur (et aux moteurs de recherche) et (2) il y a d'autres moyens de customiser la page d'erreur, et, si c'est ce que tu veux faire, de renvoyer à la même page que la page HTML qui s'affiche en cas d'erreur 404.

Tout d'abord, la directive
Redirect
va, comme tu l'utilises, renvoyer un code HTTP 302 :

https://httpd.apache.org/docs/2.4/fr/mod/mod_alias.html#redirect

Si aucun argument état n'est spécifié, la redirection sera temporaire (code HTTP 302). Le client est alors informé que la ressource a été temporairement déplacée.

Or, c'est faux.

Ensuite, ton serveur, s'il tente de rediriger vers une page qui n'existe pas va effectivement renvoyer un deuxième code d'erreur HTTP 404 en relation avec le résultat de la tentative d'affichage de la redirection, donc un deuxième code HTTP. Celui-là signifie que cette page n'a pas été trouvée, mais qu'elle peut être disponible dans le futur (encore une information fausse).

Si l'accès à certaines parties est interdit, paramètre Apache pour l'interdire avec les directives Deny dans un bloc Directory les identifiant, et laisse Apache renvoyer le bon code HTTP dans les entêtes.

Si tu veux que les erreurs 404 et 403 (accès interdit) aboutissent à la même page, tu peux faire cela avec Apache avec la directive ErrorDocument :

https://httpd.apache.org/docs/2.4/custom-error.html

Les pages de ton choix seront affichées, éventuellement les mêmes, mais le code HTTP renvoyé dans les entêtes par Apache renseignera comme il se doit l'utilisateur.

Dal
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785 -
cela dit, si tu veux vraiment renvoyer un code HTTP 404 pour un répertoire existant, tu peux faire comme suggéré dans ce post sur SO.
electroking
Messages postés
227
Date d'inscription
dimanche 14 septembre 2014
Statut
Membre
Dernière intervention
29 mai 2019
4 -
Pour ce qui est du serveur Apache, je ne sais pas si c'est cela que j'utilise, car je ne m'interesse pas à ce genre de choses. Mais en tout cas je déteste linux donc ça métonnerais si Apache à un rapport avec.

En ce qui concerne le htaccess, je ne sais pas si tu as bien compris mon problème :

J'ai un fichier
404.php
et mon htaccess qui redirige correctement vers ce fichier lorsque je visite une page qui n'existe pas.

Le problème c'est que ce fichier est chargé à l'emplacement de l'url que j'ai entrée.

Donc si je tape http://blablabla.com/xxx/yyy/zzz/
je vais voir ce fichier comme s'il était placé ici : http://blablabla.com/xxx/yyy/zzz/404.php

Or j'utilise dans mon code HTML des chemins relatifs notamment pour le CSS, les images, ect ...

Du coup mon CSS, qui était à la base à http://blablabla.com/style.css par exemple ;
se retrouve (pour le fichier 404.php) ici : http://blablabla.com/xxx/yyy/zzz/style.css et n'est pas chargé, vu que je l'apelle avec le chemin ./style.css dans mon fichier 404.php
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785 -
Ne peux-tu pas, simplement, dans le code de ton fichier 404.php, indiquer un chemin absolu pour ton fichier CSS, et pour tous les autres liens internes présents dans le code html généré par cette page ?

<link rel="stylesheet" type="text/css" href="/style.css">