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
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.
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