Solucionar el 500 Internal Server Error

In this Article

Si hay una cosa que nos molestaría mucho, sería que instalaras WP Rocket y luego te enfrentaras con un mensaje críptico de error  “500 Internal Server Error”, donde tu sitio web se vería desaparecer con la botas puestas.

Odiamos cuando esto pasa pero a veces, bajo circunstancias que no podemos controlar, sucede. Aquí te decimos lo que puedes hacer al respecto.

Debugging

Backup y suprimir el .htaccess

La primera cosa que tienes que hacer es conectarte a tu cliente FTP y localizar el fichero  .htaccess para tu sitio. Esto normalmente se encuentra en la raíz de tu servidor, o en tu instalación WordPress. Crea un backup de tu fichero, luego renómbralo o suprímelo desde el servidor.

Si tu sitio vuelve en linea, sabes que el problema está relacionado al fichero .htaccess. Ahora vuelve a poner el fichero original - verás otra vez el error, pero esta vez lo vamos a solucionar.

Ajustar a través de un MU Plugin personalizad

WP Rocket usa 7 filtros PHP filters para añadir 7 bloques de reglas a tu fichero .htaccess file (mira las referencias al final de este artículo).

Para poder purificar estos bloques uno por uno, crea un MU plugin como indicado a continuación:

Nota: Lee también las instrucciones generales en este artículo:
¿Cómo hacer un MU-plugin personalizado?

1

Crea una carpeta llamada   mu-plugins dentro de  wp-content. 
En caso de que la carpeta mu-plugins exista ya, no es necesario crearla otra vez, usa la existente.

2

Usando un editor de texto básico   crea un nuevo fichero e introduce estas lineas de código: 

<?php
defined( 'ABSPATH' ) or die( 'Cheatin&#8217; uh?' );
/**
 * Plugin Name: WP Rocket | Fix Error 500
 * Description: Prevents the dreaded error 500 from appearing.
 * Author:      WP Rocket Support Team
 * Author URI:  http://wp-rocket.me/
 * License:     GNU General Public License v3 or later
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 */

// Each of these lines removes 1 block of WP Rocket rules from .htaccess.
add_filter('rocket_htaccess_charset', '__return_false');
add_filter('rocket_htaccess_etag', '__return_false');
add_filter('rocket_htaccess_web_fonts_access', '__return_false');
add_filter('rocket_htaccess_files_match', '__return_false');
add_filter('rocket_htaccess_mod_expires', '__return_false');
add_filter('rocket_htaccess_mod_deflate', '__return_false');
add_filter('rocket_htaccess_mod_rewrite', '__return_false');
	
3
Guarda el fichero como  wp-rocket-fix-500.php
4

Sube este fichero a la carpeta  mu-plugins que has creado al punto 1.

5

Finalmente, asegúrate de  desactivar y re-activar WP Rocket.

Cuando hayas subido el MU plugin y actualizado la página en el navegador, el error 500 debería haber desaparecido, pero ahora has suprimido todos los bloques de WP Rocket de tu fichero .htaccess 

Sin embargo, deberías suprimir solamente los bloques necesarios para evitar el error. Entonces hagamos lo siguiente: 

1
Suprime las líneas  add_filter() del MU plugin, una a la vez.
2
Cada vez que eliminas una línea, guarda el fichero, desactiva y reactiva WP Rocket y controla tu sitio web.
3
Cuando el Error 500 vuelve a presentarse, sabes que la línea que acabas de suprimir era la que permitía de evitar el error. 
4
Re-añade la última línea eliminada y suprime todas las demás que empiezan por  add_filter.

Voilà, el error 500 debería haberse solucionado ahora!

Nota: un metodo alternativo para solucionar el problema, sería abrir el fichero .htaccess y suprimir cada bloque de reglas una por una hasta que el error desaparezca. Así sabrías también cuál bloque está causando el problema, pero deberías igualmente crear el MU plugin para resolver el problema de manera permanente.
Aquí te enseñamos un  video que explica el procedimiento alternativo.

Referencia: reglas del .htaccess

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|svg|svgz|txt|xsd|xsl|xml)$">
<IfModule mod_headers.c>
Header set X-Powered-By "WP Rocket/2.6.8"
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();
# Expires headers (for better cache control)
<IfModule mod_expires.c>
ExpiresActive on


# Perhaps better to whitelist expires rules? Perhaps.
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 1 month"
ExpiresByType image/png                 "access plus 1 month"
ExpiresByType image/jpeg                "access plus 1 month"
ExpiresByType video/ogg                 "access plus 1 month"
ExpiresByType audio/ogg                 "access plus 1 month"
ExpiresByType video/mp4                 "access plus 1 month"
ExpiresByType video/webm                "access plus 1 month"


# HTC files  (css3pie)
ExpiresByType text/x-component          "access plus 1 month"


# Webfonts
ExpiresByType application/x-font-ttf    "access plus 1 month"
ExpiresByType font/opentype             "access plus 1 month"
ExpiresByType application/x-font-woff   "access plus 1 month"
ExpiresByType application/x-font-woff2  "access plus 1 month"
ExpiresByType image/svg+xml             "access plus 1 month"
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)$ 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>