web-dev-qa-db-fra.com

Utilisez .htaccess pour rediriger HTTP vers HTTP

S'il vous plaît, ne me recommandez pas le fil long et très détaillé avec plus de 173 votes positifs. Cela n'a pas fonctionné pour moi. J'ai aussi essayé beaucoup d'autres ( 1 , 2 , 3 , 4 ). Ils me donnent tous TOO_MANY_REDIRECTS ou erreur 500. Voici donc mon problème:

Avec mon .htaccess actuel, voici ce qui se passe:

https://www.dukescasino.com/ - fonctionne parfaitement

https://dukescasino.com/ - redirige vers ce qui précède, ce qui est excellent

Les deux options ci-dessous se chargent très bien, mais il devrait être redirigé vers la version https:

http://www.dukescasino.com/

http://dukescasino.com/

Voici le .htaccess actuel:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

Je ne crois pas que cela soit pertinent, mais si oui, voici la liste des plugins actifs actuels:

  • Champs personnalisés avancés
  • Tout en un pack de référencement
  • Type d'élément de la boîte de recherche Bop pour les menus de navigation
  • Formulaire de contact 7
  • Désactiver les commentaires
  • Google Sitemaps XML
  • Jetpack par WordPress.com
  • Rechercher et filtrer
  • Slider WD
  • TablePress
  • UpdraftPlus - Sauvegarde/restauration
  • Sécurité Wordfence
  • WPide
  • WP Smush
  • WP Super Cache

Edit 1 - Tests effectués:

Test A:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
RewriteCond %{HTTP_Host} !^www\.
RewriteRule .* https://www.%{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>

Résultat: ERR_TOO_MANY_REDIRECTS

Test B:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

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

Résultat: ERR_TOO_MANY_REDIRECTS

Test C:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{SERVER_PORT} ^80$
 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

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

Résultat: ERR_TOO_MANY_REDIRECTS

Test D:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

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

Résultat: ERR_TOO_MANY_REDIRECTS

Test E:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_Host}%{REQUEST_URI}$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI}$1

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

Résultat: 302 trouvé. En outre, une erreur 500 Internal Server Error s'est produite lors de la tentative d'utilisation d'un ErrorDocument pour gérer la demande.

67
Cristiano Maia

Problème résolu!

.Htaccess final:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
81
Cristiano Maia

Sur Dreamhost, cela a fonctionné:

<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>
130
Jason Shah

Ça marche pour moi:

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

# END WordPress
14
henrike

Dans mon cas, le fichier htaccess contenait de nombreuses règles installées par des plugins tels que Far Future Expiration et WPSuperCache, ainsi que les lignes de wordpress.

Afin de ne pas gâcher les choses, j'ai dû placer la solution au sommet de htaccess (c'est important, si vous le mettez à la fin, cela provoque des redirections erronées en raison de conflits avec le plugin cache)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
</IfModule>

Ainsi, wordpress ne perturbera pas vos lignes si certains paramètres changent. Également <IfModule> Cette section peut être répétée sans aucun problème.

Je dois remercier Jason Shah pour la règle nette htaccess .

11
Hüseyin Yağlı

Pour votre information, cela dépend vraiment de votre fournisseur d'hébergement.

Dans mon cas ( Infomaniak ), rien ci-dessus n'a réellement fonctionné et j'ai obtenu une boucle de redirection infinie.

La bonne façon de faire est en fait expliqué sur leur site de support :

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://your-domain.com/$1 [R=301,L]

Alors, vérifiez toujours avec votre fournisseur d'hébergement. J'espère qu'ils ont un article expliquant comment faire cela. Sinon, il suffit de demander au support.

4
Indigo

Ceci est testé et sûr à utiliser

Pourquoi ?: Lorsque Wordpress modifie vos règles de réécriture , assurez-vous que votre règle HTTPS ne doit pas être supprimée ! c'est donc pas de conflit avec les règles natives Wordpress.

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

# BEGIN WordPress
<IfModule mod_rewrite.c>
  #Your our Wordpress rewrite rules...
</IfModule>
# END WordPress

Remarque: Vous devez modifier Adresse WordPress & Adresse du site urls à https:// dans Paramètres généraux aussi (wp-admin/options-general.php)

2
l2aelba

J'ai trouvé que toutes les solutions énumérées dans ce Q & R ne fonctionnaient pas pour moi, malheureusement. Quel a été le travail:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

RewriteCond %{HTTP_Host} ^example\.com$ [OR]
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress

Notez que les règles Wordpress ci-dessus s'appliquent à Wordpress en mode réseau multi-utilisateurs. Si votre Wordpress est en mode site unique, vous utiliseriez:

# 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]

RewriteCond %{HTTP_Host} ^example\.com$ [OR]
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress
1
Steve

Rien de ce qui précède n'a fonctionné pour moi. Mais ces lignes ont résolu le même problème sur mon site WordPress:

RewriteEngine On

RewriteCond %{HTTP:HTTPS} !on
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
1
lundgren

Ajoutez ceci dans le fichier .htaccess de WordPress:

RewriteCond %{HTTP_Host} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_Host} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]

Par conséquent, le fichier .htaccess par défaut de WordPress devrait ressembler à ceci:

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

RewriteCond %{HTTP_Host} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_Host} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]
</IfModule>
0
Tommykx

le moyen le plus simple de rediriger http vers https dans wordpress consiste à modifier site_url et home de http://exemple.com vers https://exemple.com . Wordpress fera la redirection. (c'est pourquoi vous obtenez une erreur "trop ​​de redirections", wordpress redirige vers http tandis que .htaccess redirigera vers https)

0
Rafael

Aucun si cela a fonctionné pour moi. Avant tout, je devais regarder mon fournisseur pour voir comment il activait SSL dans .htaccess que mon fournisseur donne 

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTP:HTTPS} !on
   RewriteRule (.*) https://%{SERVER_NAME}/$1 [QSA,L,R=301]
</IfModule>

Mais ce qui m'a pris des jours de recherche, c'est que j'ai dû ajouter à wp-config.php les lignes suivantes car mon site fourni est derrière un proxy:

/**
 * Force le SSL
 */
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';
0
Alain ANDRE
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
    RewriteEngine On
    RewriteCond %{HTTP_Host} ^digitalsoftwaremarket.com [NC]
    RewriteRule ^(.*)$ http://www.digitalsoftwaremarket.com/$1 [L,R=301]
</IfModule>
0
Saurabh Panchal

Voici une solution alternative que vous pouvez utiliser si vous ne souhaitez pas éditer .htaccess:

add_action( 'template_redirect', 'nonhttps_template_redirect', 1 );

function nonhttps_template_redirect() {

    if ( is_ssl() ) {

        if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'https' ) ) {

            wp_redirect( preg_replace( '|^http://|', 'https://', $_SERVER['REQUEST_URI'] ), 301 );

            exit();

        } else {

            wp_redirect( 'https://' . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'], 301 );

            exit();

        }

    }

}

Vous pouvez placer ceci au bas de votre thème functions.php

0
Higher Coding

Le .htaccess final et le test A, B, C, D, E ne fonctionnaient pas pour moi. Je viens d'utiliser ci-dessous du code de 2 lignes et cela fonctionne sur mon site WordPress:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.thehotskills.com/$1 [R=301,L]

Je ne sais pas trop où j'ai commis l'erreur, mais cette page m'a aidé.

0
Raj Singh

Rediriger de http à https: // www

RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Cela fonctionnera à coup sûr!

0
Kundan roy

Il suffit d’ajouter ou de remplacer ce code dans votre fichier .htaccess dans wordpress

# 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
0
Zihadul Islam