Redirection vers une 404 personnalisée

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

14 sept. 2015, 03:32

Bonjour,

Décidément, je suis vraiment (b)rouillé avec les configs Apache.
Aujourd'hui mon souci concerne la redirection vers une page 404 personnalisée.

J'ai donc créé une page (virtuelle) "couac-404.htm"
et je souhaite naturellement que l'internaute soit automatiquement redirigé vers cette page dès qu'il utilise une URL moisie.

Voici les instructions que j'ai inscrites dans mon .htaccess
ErrorDocument 404 couac-404.htm
RewriteRule ^couac-([0-9]+)\.htm$			     		 index.php?p=$1       [L]
L'erreur est bien détectée, mais au lieu de me rediriger vers "couac-404.htm"
qui, techniquement parlant, est en réalité "index.php?p=404",
l'url - erronée - reste inchangée et l'écran n'affiche que le texte :
couac-404.htm
Et ça m'agace... :x

#regexsux

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

14 sept. 2015, 18:47

Il faut que tu indiques une url absolue ou que mettes un slash devant couac-404.htm pour indiquer à Apache que c'est une url relative (ou peut être qu'ajouter un RewriteBase / suffit).
A défaut, Apache pense que c'est une chaine de caractères que tu indiques comme erreur 404 et va l'envoyer telle quelle au navigateur.


##edit : le lien vers la doc :
https://httpd.apache.org/docs/current/custom-error.html
La syntaxe de la directive ErrorDocument est :

Code : Tout sélectionner

ErrorDocument <code_3_chiffres> <action>
où action peut être traitée comme :

- Une URL de redirection local (si l'action commence par un "/").
- Une URL de redirection externe (si action est une URL valide).
- Le texte à afficher (si l'action ne répond à aucune des deux conditions précédentes). Entourez le texte de guillemets (") s'il contient plusieurs mots.
Quand tout le reste a échoué, lisez le mode d'emploi...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

14 sept. 2015, 20:11

Pour le RewriteBase, je ne peux indiquer la racine
car je suis sur un hébergement mutualisé
et j'ai donc dû préciser :
RewriteBase /monprojet/
J'ai corrigé mon .htaccess de la façon suivante :
ErrorDocument 404 /couac-404.htm
RewriteRule ^\/couac-([0-9]+)\.htm$	index.php?p=$1       [L]
Mais, en utilisant une URL moisie, j'ai le message d'erreur suivant :
Not Found
The requested URL /monprojet/pagequinexistepas.htm was not found on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Cette dernière ligne me plonge dans un abîme de perplexité :
J'ai une erreur 404 sur ma page 404. Le comble, non ? :langue:

Mammouth du PHP | 2703 Messages

14 sept. 2015, 20:26

une solution simple, mettre une page couac-404.php qui va appeler index.php?p=404

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

14 sept. 2015, 22:01

une solution simple, mettre une page couac-404.php qui va appeler index.php?p=404
Ah oui, c'est pas bête, ça ! :)
C'est astucieux, c'est tout simple...
mais, c'est un peu sale quand même. :?

Je suis convaincu que mon truc est faisable avec des regex dans un .htaccess !
Il faut que j'y arrive, sinon je n'oserai plus me regarder dans... le reflet de mon écran.

Mais, [CENSURÉ], j'en [CENSURÉ] !

Mammouth du PHP | 2703 Messages

14 sept. 2015, 22:20

la ligne semble juste, mais la question est de savoir si elle est testée quand il y a une 404, ce dont je doute.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 sept. 2015, 01:27

Et tu as essayé d'inverser tes règles, d'abord le RewriteRule et ensuite le ErrorDocument ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

15 sept. 2015, 14:03

Oui.
RewriteRule ^\/couac-([0-9]+)\.htm$	index.php?p=$1       
ErrorDocument 404 /couac-404.htm [L]
Et dans ce cas, ça me provoque une erreur 500
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at [email protected] to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.