Mon site Web Wordpress est situé à exemple.com/wordpress et j'ai besoin que tout ce qu'il contient ne soit accessible que via SSL.
J'ai créé une règle .htaccess qui redirige http -> https:
RewriteEngine On
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
Après avoir appliqué cette règle, le site Web est inaccessible car il est bloqué dans une boucle de redirection.
Qu'est-ce que je fais mal?
Mon .htaccess 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>
C'est une réponse tardive mais cela fonctionne pour moi:
Changer le RewriteCond à cette
RewriteCond %{HTTP:X-Forwarded-Proto} !https
Devrait être comme ça:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://yourdomain.com/$1 [R,L]
Sans être un expert en htaccess, je dirais que vous manquez une RewriteCond
- Une condition.
Vérifiez si c'est sur le port 80. Essayez ceci:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
METTRE À JOUR:
Après avoir vu votre question mise à jour, avec l'intégralité du fichier .htaccess, voici ce que je ferais:
<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>
Avoir votre condition et règle sous les normes de Wordpress.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
Source https://www.godaddy.com/help/redirect-http-to-https-automatically-8828
Les sites Web situés derrière des équilibreurs de charge ou des proxys inverses prenant en charge HTTP_X_FORWARDED_PROTO
peuvent être corrigés en ajoutant le code suivant au fichier wp-config.php
, au-dessus de l'appel require_once:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
ou en utilisant un plugin
Ajoutez-les dans le dossier des plugins WordPress sur votre site Web, puis activez-le dans l'admin des plugins
<? /* Plugin Name: Set headers */
if (stripos(get_option('siteurl'), 'https://') === 0) {
$_SERVER['HTTPS'] = 'on';
// add JavaScript detection of page protocol, and pray!
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
}
Ça marche comme
http://www.exmaple.com/blog/
à https://www.exmaple.com/blog/
http://www.exmaple.com/
à https://www.exmaple.com/
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
ou pour une seule page
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} directory
RewriteRule ^(.*)$ https://www.example.com/directory/$1 [R,L]
ou vous pouvez ajouter ce php à un fichier particulier
if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // if request is not secure, redirect to secure url
$url = 'https://' . $_SERVER['HTTP_Host']
. $_SERVER['REQUEST_URI'];
header('Location: ' . $url);
exit;
}
ou combinez les règles de réécriture de wordpress avec celles de SSL.
RewriteRule ^(.*)$ https://www.example.com/directory/index\.php[R,L]