2009-06-18 7 views
2

En apache je voudrais retourner 404 erreurs chaque fois que je reçois une erreur de 500.Apache: retourner 404 erreurs au lieu de 500 erreurs

C'est un cas d'utilisation très étrange, je sais, mais je me demande si c'est possible.

J'ai trouvé ce

http://www.4webhelp.net/tutorials/misc/errors.php

Ce qui me conduit à croire que vous pouvez changer ce qui se passe sur les différentes erreurs. Quelque chose comme ça serait génial

ErrorDocument 404 /cgi-bin/error404.cgi

ErrorDocument 500 /cgi-bin/error404.cgi

Comme le suggère l'article, mais je ne semble pas avoir error404.cgi sur mon installation Ubuntu. Toute idée où je peux l'obtenir, ou une solution alternative?

+0

Les directives ErrorDocument modifient le message qui est affiché pour l'utilisateur, mais n'affectent pas le code d'état que le serveur signale en arrière-plan au navigateur. Voulez-vous simplement masquer le message "500 Error" de l'utilisateur (dans ce cas, cela suffira), ou voulez-vous en fait empêcher complètement le serveur de signaler un 500 au navigateur, quel que soit l'utilisateur voit? –

+0

Je cherche à faire cela aussi, que ce soit avec 'ErrorDocument' ou une autre solution Apache – JLewkovich

Répondre

0

Vous devez créer error404.cgi. Allez dans/usr/lib/cgi-bin puis créez un fichier appelé error404.cgi. Il devrait être Perl (par défaut) ou si Python est activé, vous pouvez utiliser l'un ou l'autre. Si vous ne savez pas non plus Python ou Perl, Perl Heres un script de base qui devrait fonctionner pour vous: (Vous pouvez télécharger le script de mon site Web à l'cwarren.uuuq.com/downloads/perl/404.pl

 
#!/usr/bin/perl 
use strict; 
print "<html>"; 
print "<head>"; 
print "<title>404 ERROR!</title>"; 
print "</head>"; 
print "<body>"; 
print "<h1>Sorry for the broken link, but this page is not here!</h1>"; 
print "<br><br>"; 
print "<a href=\"javascript:history.go(-1)\">Click here to go back to the previous page.</a>"; 
exit(0); 

Une autre option serait de changer le lien vers /var/www/404.html ou quelque chose

+4

Deux problèmes ici: Premièrement, il n'y a aucune raison pour que ce soit un script CGI. La cible d'une directive ErrorDocument peut être n'importe quel fichier sur le serveur Web, y compris HTML. Deuxièmement: alors que cela va * dire * "Erreur 404" à l'utilisateur, il va toujours retourner un code d'état HTTP de 500 au navigateur Web lorsqu'il est utilisé comme ErrorDocument pour une erreur 500. –

+1

Oui, j'ai besoin d'une erreur 400 renvoyée au navigateur, pas seulement une page différente retournée à l'utilisateur. Merci pour l'essai. – Dave

1

Je sais que cela ne répond pas à votre question, mais êtes-vous sûr que vous voulez vraiment faire cela? 404 sont des choses très différentes destinées à être utilisées à différentes fins Vous dites à un utilisateur que l'URL qu'il a est erronée alors qu'en fait c'est un problème temporaire avec votre application/serveur. ceci que de dire à l'utilisateur il y a un temporar y problème et ils devraient essayer à nouveau plus tard? Ou en d'autres termes, pourquoi ne pas avoir une page d'erreur personnalisée 500?

+0

Ouais, c'est fondamentalement une solution très temporaire. C'est une erreur que je n'ai pas le pouvoir de corriger sur un ancien code. Le nouveau code le remplacera dans un mois, mais en attendant j'ai besoin d'un certain nombre de pages qui rapportent actuellement 500 erreurs pour retourner les 404. – Dave

Questions connexes