web-dev-qa-db-fra.com

Demander à Apache d'afficher 404 sur l'URL de page manquante au lieu de le rediriger vers l'URL de page d'erreur

En supposant que non-existent-page.html n'existe pas et que l'utilisateur tente d'accéder à cette page et a déclenché une erreur 404.

Puis-je afficher l'URL de la page demandée:

http://www.example.com/non-existent-page.html

au lieu de l'URL de la page d'erreur:

http://www.example.com/404.html

Solution:

En regardant la réponse de Stephen Ostermiller, je savais que j'utilisais une URL relative, mais je me suis rendu compte qu'il y avait une barre oblique manquante à la fin parce que je pointais vers un répertoire et non une page. Cela se produit principalement avec certains xSP avec de mauvaises configurations.

Problème

ErrorDocument 404 /error/404  <-- no slash

Réparer

ErrorDocument 404 /error/404/ <-- added slash
6
Explisam

Le serveur Apache peut être configuré pour afficher la page d'erreur à l'URL d'erreur ou il peut être redirigé vers la page d'erreur. Il est presque préférable d’afficher la page d’erreur directement à l’URL plutôt que d’y rediriger.

La directive Apache ErrorDocument explique comment l'implémenter dans les deux sens:

Les URL peuvent commencer par une barre oblique (/) pour les chemins Web locaux (par rapport à DocumentRoot) ou par une URL complète que le client peut résoudre.

Concrètement, cela signifie que si vous spécifiez le document d'erreur en tant qu'URL absolue, cela provoquera une redirection vers la page d'erreur:

ErrorDocument 404 http://www.example.com/404.html

mais si vous spécifiez le document d'erreur en tant qu'URL relative commençant par une barre oblique, le document d'erreur s'affichera à l'URL d'origine où l'erreur s'est produite:

ErrorDocument 404 /404.html

Mon hypothèse est que votre directive ErrorDocument est configurée comme une adresse URL absolue dans votre fichier . Htaccess ou dans votre httpd.conf fichier. Vous devez le modifier pour le changer en une URL relative.

4

Vous devez utiliser pour cela RewriteEngine, en ajoutant une condition/règle pour détecter si la requête HTTP se termine avec l'extension html , puis rediriger vers la même URL sans elle, dans .htaccess:

RewriteEngine On
  RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
  RewriteRule (.*)\.html$ $1 [R=301]

Ceci redirigera chaque requête se terminant par .html version vers la même URL sans extension. Si la version non . Html existe, comme lors de l'accès à une URL incorrecte, la page 404 sera affichée.

Jetez un coup d'oeil à la directive RewriteRule ici

1
marcanuy