Redirigir todas las peticiones HTTP a HTTPS en WordPress vía .htaccess
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.

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.

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.

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

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>

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

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

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

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á. :)

#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
