Résoudre l’erreur 500, erreur serveur interne (internal server error)
Dans cet article
Parfois, quand vous installez WP Rocket, vous obtenez un message d’erreur 500 Internal Server Error à la place de votre site. Et s'il y a bien une chose qu'on déteste, c'est ça !
Il y a plusieurs raisons possibles à ce problème, certaines peuvent être liées à WP Rocket, d'autres non...
Déboguer
Sauvegarder et Supprimer .htaccess
La première chose que vous devez faire, c’est vous connecter via votre client FTP et trouver le fichier .htaccess (celui-ci peut être trouvé à la racine de votre serveur). Créez-en une sauvegarde et renommez le fichier ou supprimez le du serveur.
Dans le fichier original, supprimez toutes les règles de WP Rocket, en ne laissant que les règles par défaut de WordPress.
Si votre site revient en ligne, alors vous savez que le problème vient du fichier .htaccess. Si vous remettez le fichier .htaccess, le problème sera de retour, mais nous allons maintenant le résoudre.
Affiner avec un plugin d'assistance
WP Rocket utilise 7 filtres PHP pour ajouter 7 blocs de règles à votre fichier .htaccess (voir la référence à la fin de cet article).
Pour pouvoir déboguer ces blocs un par un, installez ce petit plugin d’assistance :
📥 Télécharger (.zip): WP Rocket | Remove All .htaccess Rules
Développeurs: vous trouverez le code de ce plugin sur GitHub.
Lorsque vous activez ce plugin et rechargé votre page dans le navigateur, l'erreur 500 devrait disparaître, mais vous avez aussi supprimé tous les blocs de règles de WP Rocket de votre fichier .htaccess.
Cependant, vous ne devez supprimer que les blocs nécessaires pour que l'erreur disparaisse, pas les autres.
Pour ce faire:
- 1
-
Supprimez une par une, les lignes débutant par
add_filter()
du plugin. - 2
-
Après chaque suppression, enregistrez le fichier, désactivez et réactivez WP Rocket et vérifiez votre site.
- 3
-
Lorsque l'erreur 500 revient, vous savez que la ligne que vous venez de supprimer est celle qui fait disparaître l'erreur.
- 4
-
Rajoutez cette dernière ligne supprimée et supprimez toutes les autres lignes commençant par
add_filter
.
Voilà, l'erreur 500 devrait être corrigée!
Note: Une autre méthode pour déboguer serait d'ouvrir votre fichier .htaccess et de supprimer chaque blocs de règles un par un jusqu'à ce que l'erreur disparaisse. Mais le mieux reste d’utiliser le plugin d’aide ci-dessus.
Réferences : règles .htaccess ajoutée par WP Rocket
Charset
rocket_htaccess_charset();
# Use UTF-8 encoding for anything served text/plain or text/html AddDefaultCharset UTF-8 # Force UTF-8 for a number of file formats <IfModule mod_mime.c> AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml </IfModule>
ETag
rocket_htaccess_etag();
# FileETag None is not enough for every server. <IfModule mod_headers.c> Header unset ETag </IfModule> # Since we’re sending far-future expires, we don’t need ETags for static content. # developer.yahoo.com/performance/rules.html#etags FileETag None
WebFonts
rocket_htaccess_web_fonts_access();
# Send CORS headers if browsers request them; enabled by default for images. <IfModule mod_setenvif.c> <IfModule mod_headers.c> # mod_headers, y u no match by Content-Type?! <FilesMatch "\.(cur|gif|png|jpe?g|svgz?|ico|webp)$"> SetEnvIf Origin ":" IS_CORS Header set Access-Control-Allow-Origin "*" env=IS_CORS </FilesMatch> </IfModule> </IfModule> # Allow access to web fonts from all domains. <FilesMatch "\.(eot|otf|tt[cf]|woff2?)$"> <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule> </FilesMatch>
FilesMatch
rocket_htaccess_files_match();
<IfModule mod_alias.c> <FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$"> <IfModule mod_headers.c> Header set X-Powered-By "WP Rocket/3.10-alpha1" Header unset Pragma Header append Cache-Control "public" Header unset Last-Modified </IfModule> </FilesMatch> <FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$"> <IfModule mod_headers.c> Header unset Pragma Header append Cache-Control "public" </IfModule> </FilesMatch> </IfModule>
ModExpires
rocket_htaccess_mod_expires();
<IfModule mod_mime.c> AddType image/avif avif AddType image/avif-sequence avifs </IfModule> # Expires headers (for better cache control) <IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 1 month" # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5) ExpiresByType text/cache-manifest "access plus 0 seconds" # Your document html ExpiresByType text/html "access plus 0 seconds" # Data ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" # Feed ExpiresByType application/rss+xml "access plus 1 hour" ExpiresByType application/atom+xml "access plus 1 hour" # Favicon (cannot be renamed) ExpiresByType image/x-icon "access plus 1 week" # Media: images, video, audio ExpiresByType image/gif "access plus 4 months" ExpiresByType image/png "access plus 4 months" ExpiresByType image/jpeg "access plus 4 months" ExpiresByType image/webp "access plus 4 months" ExpiresByType video/ogg "access plus 4 months" ExpiresByType audio/ogg "access plus 4 months" ExpiresByType video/mp4 "access plus 4 months" ExpiresByType video/webm "access plus 4 months" ExpiresByType image/avif "access plus 4 months" ExpiresByType image/avif-sequence "access plus 4 months" # HTC files (css3pie) ExpiresByType text/x-component "access plus 1 month" # Webfonts ExpiresByType font/ttf "access plus 4 months" ExpiresByType font/otf "access plus 4 months" ExpiresByType font/woff "access plus 4 months" ExpiresByType font/woff2 "access plus 4 months" ExpiresByType image/svg+xml "access plus 4 months" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" # CSS and JavaScript ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" </IfModule>
ModDeflate
rocket_htaccess_mod_deflate();
# Gzip compression <IfModule mod_deflate.c> # Active compression SetOutputFilter DEFLATE # Force deflate for mangled headers <IfModule mod_setenvif.c> <IfModule mod_headers.c> SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding # Don’t compress images and other uncompressible content SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp|pdf)$ no-gzip dont-vary </IfModule> </IfModule> # Compress all output labeled with one of the following MIME-types <IfModule mod_filter.c> AddOutputFilterByType DEFLATE application/atom+xml \ application/javascript \ application/json \ application/rss+xml \ application/vnd.ms-fontobject \ application/x-font-ttf \ application/xhtml+xml \ application/xml \ font/opentype \ image/svg+xml \ image/x-icon \ text/css \ text/html \ text/plain \ text/x-component \ text/xml </IfModule> <IfModule mod_headers.c> Header append Vary: Accept-Encoding </IfModule> </IfModule>
ModRewrite
rocket_htaccess_mod_rewrite();
<IfModule mod_mime.c> AddType text/html .html_gzip AddEncoding gzip .html_gzip </IfModule> <IfModule mod_setenvif.c> SetEnvIfNoCase Request_URI \.html_gzip$ no-gzip </IfModule> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTPS} on [OR] RewriteCond %{SERVER_PORT} ^443$ [OR] RewriteCond %{HTTP:X-Forwarded-Proto} https RewriteRule .* - [E=WPR_SSL:-https] RewriteCond %{HTTP:Accept-Encoding} gzip RewriteRule .* - [E=WPR_ENC:_gzip] RewriteCond %{REQUEST_METHOD} GET RewriteCond %{QUERY_STRING} ="" RewriteCond %{HTTP:Cookie} !(wordpress_logged_in_|wp-postpass_|wptouch_switch_toggle|comment_author_|comment_author_email_) [NC] RewriteCond %{REQUEST_URI} !^(/_test/|/wp-json/(.*))$ [NC] RewriteCond %{HTTP_USER_AGENT} !^(facebookexternalhit).* [NC] RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}.html%{ENV:WPR_ENC}" -f RewriteRule .* "/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}.html%{ENV:WPR_ENC}" [L] </IfModule>
Augmenter la limite de mémoire
Si vous avez une erreur de 500 et que la suppression des règles de htaccess n'aide pas, vous devriez essayer d' augmenter la limite de mémoire de votre serveur.