Redirecționare toate cererile HTTP către HTTPS prin .htaccess în WordPress
Am făcut asta de multe ori înainte și totuși, din motive necunoscute, nu reușesc să o fac din nou. Am încercat nenumărate soluții. Tot ce am încercat duce la o buclă infinită de redirecționare.
Care este cea mai bună opțiune pentru a face acest lucru?
Actualizare 1 Iată câteva dintre lucrurile încercate:
RewriteCond %{HTTP_HOST} ^website\.co\.uk [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.website.co.uk/$1 [R,L]
Și:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.website.co.uk$1 [R,L]
Am testat în diferite browsere pentru a preveni problemele de cache. Tot nu funcționează, primesc doar o buclă continuă de redirecționare.
Am înțeles, când introduceți un link către pagina dumneavoastră, altul decât pagina principală, de exemplu:
http://www.michaelcropper.co.uk/contact-me
www.michaelcropper.co.uk/contact-me
michaelcropper.co.uk/contact-me
Dacă prefixul https://
nu este prezent, se încarcă link-ul HTTP. Adăugați următoarele în fișierul .htaccess
între tag-ul <IfModule mod_rewrite.c>
:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
Dacă nu au fost făcute modificări suplimentare în fișierul .htaccess
, acesta ar trebui să arate astfel:
# 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]
# Redirecționează HTTP la HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# END WordPress
Anunțați-mă cum merge.

Mulțumesc @EthanJinksO'Sullivan, a funcționat. Destul de ciudat, am găsit o altă configurație unde aveam acest lucru funcțional, care era foarte asemănătoare cu configurația inițială pe care am testat-o și care a funcționat și ea în această dimineață RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.michaelcropper.co.uk/$1 [R=301,L]
- Bazat pe asta, ar trebui să presupun că ceva undeva era cache-uit. Cine știe cu siguranță.

Nu a funcționat pentru mine - regulile https par să trebuiască să fie puse înainte, pentru a funcționa și cu paginile interne.

Adăugați cod în fișierul .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ÎNCEPUT WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Adaugă acest cod în fișierul tău .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

Dacă utilizați W3 Total Cache, răspunsul de la @Ethan Jinks O'Sullivan va funcționa doar dacă plasați redirecționarea înainte de modulele W3 Total Cache în fișierul .htaccess, așa cum este arătat mai jos:
# BEGIN Redirecționare HTTP către HTTPS
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# END Redirecționare HTTP către HTTPS
# BEGIN Compresie GZIP
...
# END Compresie GZIP
# BEGIN Compresie DEFLATE
...
# END Compresie DEFLATE
# BEGIN Cache pentru browser W3TC
...
# END Cache pentru browser W3TC
# BEGIN Cache de pagini W3TC core
...
# END Cache de pagini W3TC 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

Dacă nu dori să modifici nimic în .htaccess poți încerca această soluție:
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();
}
}
Sau poți încerca acest plugin: HTTPS Redirect

Mi-a luat 10 minute să rezolv problema
Adaugă un fișier de configurare pentru domeniul tău.
Accesează CentOS 7 la /etc/httpd/conf.d/
, apoi creează un fișier de configurare numit orice.conf
.
Introdu următorul cod în el:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin webmaster@domain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
Înlocuiește example.com
cu domeniul tău.
Apoi adaugă codul de rescriere HTTPS în .htaccess și va funcționa. :)

#ÎNCEPUT Redirecționare HTTP la HTTPS
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
#SFÂRȘIT Redirecționare HTTP la HTTPS
# ÎNCEPUT 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>
# SFÂRȘIT WordPress
