2010-03-17 7 views
3

S'il vous plaît jeter un oeil à l'.htaccess suivantApache .htaccess: ErrorDocument et RewriteEngine ne travaillent pas ensemble

ErrorDocument 404 /404/ 

RewriteEngine On 
RewriteRule (.*) index.php [L] 

Avec cette configuration, j'utilise header('HTTP/1.1 404 Not Found'); en PHP pour rediriger vers la page de gestion des erreurs et envoyer le approprié Code d'état HTTP. Le code d'état 404 correct est envoyé, mais le navigateur affiche une page vierge et le journal d'accès affiche "GET /invalid-url/ HTTP/1.1" 404 -

Quelqu'un peut-il me dire comment faire fonctionner ErrorDocument avec les réécritures d'URL Apache?

Répondre

1

Je pense que la réponse à ma question est: je ne dois pas. Ce que j'essayais d'accomplir était une "redirection 404". C'est-à-dire, lorsque vous demandez une URL invalide, redirigez vers le document 404 en définissant l'en-tête "Status 404 Not found". Et je ne suis pas sûr que ce soit quelque chose que je veux, parce que les URL non valides doivent être marqués avec le code d'état 404, pas redirigé.

0

Cela devrait fonctionner si vous définissez le réécrire avant le ErrorDocument.

+0

Eh bien, ce n'est pas le cas. Je pense que Benoit a raison. Seul l'envoi d'un en-tête 404 à partir de PHP sans contenu ne force pas Apache à diffuser le contenu à l'URL définie dans mon ErrorDocument. J'espérais cela, mais ça n'arrive pas. – bogdanvursu

-2

Essayez cette

 

ErrorDocument 404 /404.html 

RewriteEngine On 
RewriteRule (.*) index.php [L] 
 
+0

Non, cela n'aidera pas du tout. De plus, changer l'URL briserait certaines choses dans mon application. – bogdanvursu

+0

Je n'ai rien changé dans la RewriteRule c'est la même chose que votre posté. Je vient de modifier votre ligne ErrorDocument et il est correct pour vous, voir ce lien « http://httpd.apache.org/docs/2.0/mod/core.html#errordocument » –

+1

@Gaurav: Je sais que ce sujet est vieux et mort, mais pour toute personne qui pourrait lire ... Le ErrorDocument que vous avez utilisé est correct - ** pour votre environnement **. Que suspectez-vous si "404.html" n'existe pas dans l'environnement de bogdanvursu? Comme Benoit a répondu ci-dessus, il servait l'erreur 404 mais aucune redirection ne se produisait parce que le RewriteRule réécrivait en une URL valide (index.php) et ainsi le ErrorDocument n'a jamais été invoqué. Le problème était que son index.php renvoyait un en-tête 404 mais ne lui servant aucun contenu, l'utilisateur ne voyait rien. –

5

Oui déclarer 404 document après les règles Réécrire

Il est normal que votre serveur ne pousse aucune erreur 404, vous utilisez une expression rationnelle catchall ((. *)) Comme la seule règle de réécriture.

Mais votre question n'est pas vraiment htaccess connexes. En php, si vous envoyez l'en-tête 404, le navigateur ne sera pas automatiquement redirigé vers la page 404, mais vous devrez vous servir du contenu de la page d'erreur en PHP, comme le font la plupart des frameworks.

+0

Salut Benoit, Donc, vous dites que seul l'envoi d'un en-tête 404 ne force pas Apache au serveur le contenu à l'adresse ErrorDocument. Si je sers le contenu de PHP, après avoir défini l'en-tête 404, j'obtiens la page 404 affichée dans le navigateur, mais la barre d'adresse affiche toujours l'URL invalide, au lieu de/404 /. Après avoir réfléchi un peu plus, je suppose que ce n'est pas vraiment mauvais du tout. – bogdanvursu

+0

Salut, Vous avez raison, il ne semble pas mauvais si le navigateur n'est pas transmis à l'URL de la page réelle 404. Apache ne redirige pas trop en utilisant la déclaration ErrorDocument.À mon humble avis, il est préférable de cette façon: moteurs de recherche crawler oubliera l'url répondant avec le code de réponse 404 http, et les humains verront une belle page 404 au lieu de défaut d'apache ou pire, page avec des erreurs sur elle. – Benoit

Questions connexes