Forzar HTTPS usando .htaccess - atrapado en un bucle de redirección

13 abr 2014, 23:40:34
Vistas: 23.3K
Votos: 4

Mi sitio WordPress está ubicado en example.com/wordpress y necesito que todo su contenido sea accesible únicamente usando SSL.

He creado una regla en .htaccess que redirige http -> https:

RewriteEngine On
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]

Después de implementar esta regla el sitio web es inaccesible ya que está atrapado en un bucle de redirección.

¿Qué estoy haciendo mal?

Mi archivo .htaccess de WordPress:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]
</IfModule>
0
Todas las respuestas a la pregunta 5
2

Esta es una respuesta tardía pero esto funciona para mí:

Cambia el RewriteCond a esto:

RewriteCond %{HTTP:X-Forwarded-Proto} !https

Debería quedar así:

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://tudominio.com/$1 [R,L]
19 oct 2015 18:13:19
Comentarios

Esto finalmente funcionó para mí. ¿Alguien puede explicar por qué esta RewriteCond funcionaría cuando RewriteCond %{HTTPS} off no lo hace?

Peter G Peter G
25 nov 2015 18:04:19

En algunos casos, si la versión HTTPS del sitio no está configurada a través de Apache ModSSL, no establece la variable %{HTTPS}

Shankar Prakash G Shankar Prakash G
12 oct 2018 22:46:45
9

Sin ser un experto en htaccess, diría que te falta un RewriteCond - Una condición.

Verifica si está en el puerto 80. Prueba esto:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]

ACTUALIZACIÓN:

Después de ver tu pregunta actualizada, con el .htaccess completo - Haría esto:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]

RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
</IfModule>

Colocando tu condición y regla debajo de los estándares de WordPress.

14 abr 2014 00:51:45
Comentarios

Agregarlo a mi archivo .htaccess no ayudó, sigo experimentando el mismo problema de bucle de redirección.

SkyHiRider SkyHiRider
14 abr 2014 01:02:48

¿Puedes copiar tu archivo htaccess entonces? Públicalo en la pregunta - ¡editaré mi respuesta para otro intento!

Frederik Spang Frederik Spang
14 abr 2014 01:04:21

Prueba con RewriteCond %{HTTPS} off en lugar de la condición server_port.

Frederik Spang Frederik Spang
14 abr 2014 01:06:43

No funcionó y mi archivo .htaccess completo ya está en la pregunta :)

SkyHiRider SkyHiRider
14 abr 2014 01:15:33

Oh... ¿Dónde están las cosas estándar de Wordpress en el htaccess entonces?

Frederik Spang Frederik Spang
14 abr 2014 01:16:06

Si nada más funciona, intenta incluir RewriteEngine On nuevamente, ¡encima de mi respuesta actualizada!

Frederik Spang Frederik Spang
14 abr 2014 01:16:42

Hmm, tal vez ese sea el problema - no tengo nada más que esto en mi .htaccess

SkyHiRider SkyHiRider
14 abr 2014 02:02:18

Restauré el .htaccess por defecto, pero el problema aún no se soluciona. Actualicé mi pregunta.

SkyHiRider SkyHiRider
14 abr 2014 02:08:24

Actualicé mi respuesta - ¿Entonces simplemente combino los dos?

Frederik Spang Frederik Spang
15 abr 2014 15:24:50
Mostrar los 4 comentarios restantes
0
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Fuente https://www.godaddy.com/help/redirect-http-to-https-automatically-8828

11 oct 2016 04:00:03
0
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

o para una sola página

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} directorio
RewriteRule ^(.*)$ https://www.example.com/directorio/$1 [R,L]

o puedes agregar este código PHP a un archivo específico

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // si la solicitud no es segura, redirigir a URL segura
$url = 'https://' . $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'];

header('Location: ' . $url);
exit;
}

o combinar las reglas de reescritura de WordPress con las de SSL...

RewriteRule ^(.*)$ https://www.example.com/directorio/index\.php[R,L]
14 abr 2014 12:08:18
0

Los sitios web detrás de balanceadores de carga o proxies inversos que admiten HTTP_X_FORWARDED_PROTO pueden solucionarse agregando el siguiente código al archivo wp-config.php, encima de la llamada require_once:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

o usando un plugin

Agrega en la carpeta de plugins de WordPress en tu sitio web, luego actívalo en el administrador de Plugins

<? /* Plugin Name: Establecer cabeceras */
if (stripos(get_option('siteurl'), 'https://') === 0) {
    $_SERVER['HTTPS'] = 'on';
    // añade detección JavaScript del protocolo de la página, ¡y reza!
    add_action('wp_print_scripts', 'force_ssl_url_scheme_script');
}
function force_ssl_url_scheme_script() {
    ?>
    <script>
    if (document.location.protocol != "https:") {
        document.location = document.URL.replace(/^http:/i, "https:");
    }
    </script>
    <?php
}

Fuente

Funciona convirtiendo:

  • http://www.exmaple.com/blog/ a https://www.exmaple.com/blog/
  • http://www.exmaple.com/ a https://www.exmaple.com/
3 abr 2017 09:48:44