.htaccess - ErrorDocument vs RewriteRule
Je veux les demandes de fichiers manquants ou invalides répertoires pour rediriger vers une page erreur 404 personnalisée. Je crois que cela peut être accompli en utilisant 2 méthodes.
# redirect invalid requests and missing files to the not-found page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.example.com/not-found.html [L]
# same idea but using error document
ErrorDocument 404 /not-found.html
Est une option meilleure que l'autre? Quand je veux utiliser l'un vs l'autre?
OriginalL'auteur csi | 2013-04-03
Vous devez vous connecter pour publier un commentaire.
La règle de réécriture ne reviendra pas le bon code d'état. Ce qui signifie que d'un navigateur verrez que votre page d'erreur personnalisée, mais le code de réponse sera toujours 200, et le navigateur (ou quel que soit le client est en train de parler au serveur) vont penser que les mauvaises demande est effectivement une bonne demande.
La
ErrorDocument
déclaration d'afficher la page d'erreur personnalisée mais aussi le retour d'un 404 code de réponse, laissant le navigateur (ou quel que soit le client) à savoir que ce qu'il demande n'a pas été trouvé sur le serveur.Remarque que le mod_rewrite est un
R
drapeau que vous pouvez donner un code de réponse:Cela renvoie un 404 code de réponse mais il n'affiche pas de la
/not-found.html
page. Il sera affichage de l'erreur personnalisé document si vous utilisez leErrorDocument
déclaration:La règle de réécriture force une 404, sa cible est essentiellement ignoré, alors la
ErrorDocument
permet de s'assurer de la page d'erreur personnalisée est servi ainsi que le bon de 404 réponse.Donc, vous voulez
ErrorDocument
, à peu près toujours. L'autre chose à noter est que le mod_rewrite est dans un endroit différent dans l'URI du Fichier de mappage de canalisation queErrorDocument
. Si vous êtes en s'appuyant sur mod_rewrite pour déterminer ce qui devrait être 404 et ce qui ne l'est pas, il est susceptible d'être affecté par d'autres modules qui peuvent venir après (comme mod_proxy, par exemple).Pour être clair, la
ErrorDocument
est utilisé après l'URL vers le fichier de mappage de pipeline se conclut par une "ressource non trouvée" (c'est à dire un 404), alors l'erreur personnalisé document de déclaration,ErrorDoucment 404
, propose une page d'erreur personnalisée à la place de celui par défaut. Lorsque vous utilisez le mod_rewrite comme vous le faites dans votre question, il contourne complètement la façon naturelle de la canalisation arrive à un 404.+1 c'est une honte de voir cette réponse non acceptée.
M'a sauvé beaucoup de temps! @Jon chapeau, les filles!
c'est ressembler à vous en savez beaucoup sur apache.. peut-être que vous pouvez aider ce gars-là stackoverflow.com/questions/41415809/...
Malheureusement, cela ne fonctionne pas sur Apache/2.4.25 (Debian) / Debian 4.9.135-1 (2018-11-11) x86_64 GNU/Linux. Apache par défaut de la page d'erreur est généré à la place.
OriginalL'auteur Jon Lin