Forțare HTTPS folosind .htaccess - blocat în buclă de redirecționare

13 apr. 2014, 23:40:34
Vizualizări: 23.3K
Voturi: 4

Site-ul meu WordPress este găzduit la example.com/wordpress și am nevoie ca tot conținutul din interior să fie accesibil doar folosind SSL.

Am creat o regulă .htaccess care redirecționează http -> https:

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

După implementarea acestei reguli, site-ul web este inaccesibil deoarece este blocat într-o buclă de redirecționare.

Ce fac greșit?

Fișierul meu .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>
0
Toate răspunsurile la întrebare 5
2

Acesta este un răspuns întârziat, dar funcționează pentru mine:

Schimbă RewriteCond în această variantă

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

Ar trebui să arate astfel:

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

Acest lucru a funcționat în cele din urmă pentru mine. Poate cineva să explice de ce această RewriteCond ar funcționa atunci când RewriteCond %{HTTPS} off nu funcționează?

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

În unele cazuri, dacă versiunea https a site-ului nu este configurată prin intermediul Apache ModSSL, aceasta nu setează variabila %{HTTPS}

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

Fără a fi un expert în htaccess, aș spune că îți lipsește o condiție RewriteCond.

Verifică dacă este pe portul 80. Încearcă asta:

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

ACTUALIZARE:

După ce am văzut întrebarea ta actualizată, cu întregul fișier .htaccess - aș face asta:

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

Punând condiția și regula ta sub cele standard din Wordpress.

14 apr. 2014 00:51:45
Comentarii

Adăugarea acestuia în fișierul meu .htaccess nu a ajutat, încă întâmpin aceeași problemă de buclă de redirecționare.

SkyHiRider SkyHiRider
14 apr. 2014 01:02:48

Poți să copiezi conținutul fișierului tău htaccess? Postează-l în întrebare - voi edita răspunsul meu pentru o altă încercare!

Frederik Spang Frederik Spang
14 apr. 2014 01:04:21

Încearcă RewriteCond %{HTTPS} off în loc de condiția cu server_port.

Frederik Spang Frederik Spang
14 apr. 2014 01:06:43

Nu a funcționat și întregul meu fișier .htaccess este deja în întrebare :)

SkyHiRider SkyHiRider
14 apr. 2014 01:15:33

Oh.. Unde sunt lucrurile standard Wordpress htaccess atunci?

Frederik Spang Frederik Spang
14 apr. 2014 01:16:06

Dacă nimic altceva - Încearcă să incluzi din nou RewriteEngine On, deasupra răspunsului meu actualizat!

Frederik Spang Frederik Spang
14 apr. 2014 01:16:42

Hmm, poate asta e problema - nu am altceva decât asta în fișierul meu .htaccess

SkyHiRider SkyHiRider
14 apr. 2014 02:02:18

Am restaurat .htaccess la setările implicite, dar problema încă nu este rezolvată. Am actualizat întrebarea mea.

SkyHiRider SkyHiRider
14 apr. 2014 02:08:24

Am actualizat răspunsul meu - Doar să combin cele două atunci?

Frederik Spang Frederik Spang
15 apr. 2014 15:24:50
Arată celelalte 4 comentarii
0
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Sursă 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]

sau pentru o singură pagină

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

sau poți adăuga acest cod php într-un anumit fișier

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // dacă cererea nu este securizată, redirecționează către URL securizat
$url = 'https://' . $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'];

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

sau poți combina regulile de rescriere WordPress cu cele SSL..

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

Site-urile web care se află în spatele balanțerilor de sarcină sau proxy-urilor inverse care suportă HTTP_X_FORWARDED_PROTO pot fi remediate prin adăugarea următorului cod în fișierul wp-config.php, deasupra apelului require_once:

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

sau prin utilizarea unui plugin

Adăugați în folderul de plugin-uri WordPress pe site-ul dvs., apoi activați-l în administrarea Plugin-urilor

<? /* Plugin Name: Set headers */
if (stripos(get_option('siteurl'), 'https://') === 0) {
    $_SERVER['HTTPS'] = 'on';
    // adaugă detectarea JavaScript a protocolului paginii și speră la bine!
    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
}

Sursa

Funcționează astfel:

  • http://www.exmaple.com/blog/ către https://www.exmaple.com/blog/
  • http://www.exmaple.com/ către https://www.exmaple.com/
3 apr. 2017 09:48:44