Redirigir todas las peticiones HTTP a HTTPS en WordPress vía .htaccess

23 ago 2016, 00:33:22
Vistas: 82.7K
Votos: 12

He hecho esto muchas veces antes, y sin embargo no estoy logrando hacerlo de nuevo por alguna razón desconocida. He probado infinitas soluciones. Todo lo que he intentado resulta en un bucle infinito de redirección.

¿Cuál es la mejor opción para hacer esto?

Actualización 1 Aquí hay algunas de las cosas que he probado;

RewriteCond %{HTTP_HOST} ^website\.co\.uk [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.website.co.uk/$1 [R,L]

Y;

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.website.co.uk$1 [R,L]

Probado en diferentes navegadores para evitar problemas de caché. Aún nada, sigo obteniendo un bucle continuo de redirección.

8
Comentarios

Intenta rastrear la redirección: http://redirectdetective.com/

jdm2112 jdm2112
23 ago 2016 00:45:16

Probé eso (pregunta actualizada con información adicional) - incluso deshabilité la caché de Google Chrome para evitar problemas como este, http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development

Michael Cropper Michael Cropper
23 ago 2016 00:45:39

¿Has intentado al revés? RewriteCond %{SERVER_PORT} !^433$

David David
23 ago 2016 01:10:11

Con la respuesta que te di en tu pregunta anterior, ¿eso no solucionó todos tus problemas de HTTPS? ¿O estás haciendo esto para reforzar HTTPS en todo tu sitio web?

Ethan Rævan Ethan Rævan
23 ago 2016 01:50:55

Sí, lo solucionó para esa pregunta, gracias. Quiero limpiar todo para que si alguien accede a la versión http del sitio, sea redirigido con un 301 a https.

Michael Cropper Michael Cropper
23 ago 2016 11:48:04

@MichaelCropper esto debería ser manejado automáticamente cuando actualizaste las URL del sitio y del inicio, siempre y cuando tengas la configuración predeterminada de .htaccess que fue generada por WordPress.

Ethan Rævan Ethan Rævan
23 ago 2016 16:08:36

Es extraño. Parece que redirige automáticamente con un 301 en la página de inicio, pero no en el resto del sitio. Mira aquí, esta página aún es accesible en HTTP, http://www.michaelcropper.co.uk/contact-me/ - Probando en el sitio personal antes de implementarlo en todas partes.

Michael Cropper Michael Cropper
23 ago 2016 16:20:20

Asegúrate de usar @EthanJinksO'Sullivan para que me notifique cuando respondas y pueda contestarte rápidamente. Te daré mi respuesta a continuación.

Ethan Rævan Ethan Rævan
23 ago 2016 19:37:54
Mostrar los 3 comentarios restantes
Todas las respuestas a la pregunta 9
4
21

Entiendo, cuando ingresas un enlace a tu página que no sea la página principal, por ejemplo:

  • http://www.michaelcropper.co.uk/contact-me
  • www.michaelcropper.co.uk/contact-me
  • michaelcropper.co.uk/contact-me

Si https:// no está en el prefijo, se carga el enlace HTTP en su lugar. Agrega lo siguiente en tu archivo .htaccess entre la etiqueta <IfModule mod_rewrite.c>:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]

Si no se han realizado modificaciones adicionales en tu .htaccess, debería verse así:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# Redireccionar HTTP a HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# END WordPress

Déjame saber cómo te va.

23 ago 2016 19:46:50
Comentarios

Gracias @EthanJinksO'Sullivan esto funcionó. Curiosamente también, encontré otra configuración donde tenía esto funcionando que era muy similar a la configuración original que probé y que también funcionó esta mañana RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.michaelcropper.co.uk/$1 [R=301,L] - Basado en esto, tendría que asumir que algo en algún lugar estaba siendo almacenado en caché. Quién sabe con seguridad.

Michael Cropper Michael Cropper
24 ago 2016 12:39:57

Tuve que reescribir el código después del RewriteBase .

Harish ST Harish ST
24 oct 2018 08:01:12

No funcionó para mí - las reglas https parecen necesitar estar antes, para que funcionen también con páginas internas.

tishma tishma
20 nov 2018 15:12:13

Como dijeron los otros comentaristas: Tienes que insertar las dos líneas justo después de RewriteBase /. En la posición mostrada en la respuesta, solo funcionará para la página principal.

tanius tanius
24 sept 2019 15:06:09
0

Agregar código dentro de un archivo .htaccess

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /

   RewriteCond %{HTTPS} !=on
   RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

   # BEGIN WordPress
   RewriteRule ^index\.php$ - [L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . /index.php [L]
 </IfModule>
17 feb 2019 10:57:00
2

Puedes configurar encabezados en el archivo .htaccess

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
</IfModule>
11 sept 2018 16:38:21
Comentarios

Esto me ayudó, cuando ninguna de las opciones anteriores funcionó.

Clain Dsilva Clain Dsilva
7 ene 2020 04:59:57

+1 Esto tiene la ventaja de que es menos probable que cause conflicto con las reglas existentes de mod_rewrite.c

Dave A-W Dave A-W
27 abr 2020 07:23:30
0

prueba esto en tu .htaccess:

RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</IfModule>
# FIN WordPress
19 sept 2018 13:31:14
1

Solo agrega esto en tu archivo .htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
28 may 2018 12:57:10
Comentarios

siempre es bueno incluir una explicación de por qué este código resolvería la pregunta del OP

cjbj cjbj
28 may 2018 13:40:43
0

Si estás usando W3 Total Cache, la respuesta de @Ethan Jinks O'Sullivan solo funcionará si colocas la redirección antes de los módulos de W3 Total Cache en el archivo .htaccess como se muestra a continuación:

#BEGIN Rewrite HTTP to HTTPS
<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
#END Rewrite HTTP to HTTPS

# BEGIN GZIP COMPRESSION
...
# END GZIP COMPRESSION

# BEGIN DEFLATE COMPRESSION
...
# END DEFLATE COMPRESSION

# BEGIN W3TC Browser Cache
...
# END W3TC Browser Cache

# BEGIN W3TC Page Cache core
...
# END W3TC Page Cache core

# BEGIN WordPress
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>
# END WordPress
19 jul 2018 10:33:30
0

Si no deseas cambiar nada en el archivo .htaccess, puedes probar esto:

add_action('template_redirect', 'redirect_core', 50);
add_action('init', 'redirect_core', 50);
add_action('wp_loaded', 'redirect_core', 50);
function redirect_core(){
  if (!is_ssl()) {
    wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
    exit();
  }
}

O prueba este plugin: HTTPS Redirect

6 nov 2019 08:35:20
0
-1

Me tomó 10 minutos solucionar el problema

Añade un archivo de configuración para tu dominio.

Ve a CentOS 7 en /etc/httpd/conf.d/, luego crea un archivo de configuración llamado cualquiernombre.conf.

Coloca el siguiente código en él:

<VirtualHost *:80>
    ServerName dominio.com
    ServerAlias www.dominio.com
    ServerAdmin webmaster@dominio.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog /var/log/httpd/ejemplo.com-error.log
    CustomLog /var/log/httpd/ejemplo.com-access.log combined
</VirtualHost>

Reemplaza ejemplo.com con tu dominio.
Luego añade el código de reescritura HTTPS en el .htaccess y funcionará. :)

30 jun 2019 01:59:14
1
-1
#COMIENZO Reescribir HTTP a HTTPS
<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
#FIN Reescribir HTTP a HTTPS

# COMIENZO WordPress
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>
# FIN WordPress
13 ago 2019 13:35:34
Comentarios

¿En qué se diferencia tu respuesta de la de @ChrisSprague?

nmr nmr
13 ago 2019 13:49:27