Pārvirziet http uz https, izmantojot .htaccess failu (darbojas ar WordPress)

Es mēģinu novirzīt savu WordPress vietni no www ne uz WWW un no SSL uz SSL caurlaidīgi.

Šeit ir kods, kuru izmantoju:

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 

Nez, vai kods ir pareizs, vai to var izdarīt labāk? Es domāju, ka tas, šķiet, darbojas, bet PageSpeed ​​saka, ka man vajadzētu izvairīties no tik daudziem novirzīšanas gadījumiem.

EDIT: Tātad tam vajadzētu izskatīties šādi:

RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

?

EDIT2:

RewriteEngine On RewriteCond %{HTTP_HOST} ^static.example\.com [NC] RewriteRule (.*) https://static.example.com/$1 [L,R=301] RewriteCond %{HTTPS} !=on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Tas, kas jums ir, ir pilnīgi kārtībā, un tas ir jāievieš tādā veidā (novirzot uz HTTPS tajā pašā resursdatorā), ja plānojat ieviest HSTS.

Tomēr, lai novērstu dubultu novirzīšanu, pieprasot http://example.com, jums vajadzētu mainīt šos divus noteikumus. Pretējā gadījumā jūs saņemsit šādu dubultu novirzīšanu:

  • http://example.com uz https://example.com uzhttps://www.example.com

Piemēram:

RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule (.*) https://www.example.com/$1 [L,R=301] RewriteCond %{HTTPS} !=on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Nav nepieciešams atkārtot RewriteEngine direktīvu.

Nav nepieciešams uztvert aizmugures atsauci (ti. (.*)), ja to neizmanto aizstāšana. Enkuri nav vajadzīgi ^ un $ tā kā regex pēc noklusējuma ir alkatīgs.

Otra "stila" neatbilstība starp iepriekš minētajiem noteikumiem ir tā, ka jūs izmantojat uzņemto aizmugures atsauci ($1) pirmajā RewriteRule un REQUEST_URI servera mainīgais otrajā. Nav atšķirības, kā tas darbojas, jo tas pats darīts divos dažādos veidos. Bet tie ir divi dažādi "stili" (it kā tos rakstītu divi dažādi cilvēki).


EDIT2:

Man ir arī apakšdomēns - static.example.com (nav www). Es gribētu šeit pievienot SSL un novirzīt WWW uz citu, nevis WWW (tagad lietotāji var piekļūt vietnei arī caur www, beidzot ar URL, piemēram, www.static.example.com). Es izmēģināju kaut ko līdzīgu EDIT2 (es tikko rediģēju savu ierakstu). Vai varat pateikt, kas ir nepareizs ar šo kodu?

RewriteCond %{HTTP_HOST} ^static.example\.com [NC] RewriteRule (.*) https://static.example.com/$1 [L,R=301] RewriteCond %{HTTPS} !=on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Jūsu pirmais noteikums šeit ir novirzīšana static.example.com uz static.example.com (ti, bez izmaiņām) - tāpēc tas, protams, radīs nebeidzamu novirzīšanas cilpu (pārlūks galu galā pārtrauks kļūdu).

Ja vēlaties novirzīt no www.static.example.com tad jums tas jāpārbauda RewriteCond direktīvu. Piemēram:

RewriteCond %{HTTP_HOST} ^www\.static\.example\.com [NC] RewriteRule (.*) https://static.example.com/$1 [L,R=301] 

Es nezinu, vai jūs esat, vai nē, taču nav nepieciešams atkārtot HTTP uz HTTPS novirzīšanu - ja jūs sakārtojat direktīvas pareizajā secībā.

Tātad, abas novirzīšanas kopā:

RewriteEngine On # Main domain non-www to www redirect RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule (.*) https://www.example.com/$1 [L,R=301] # Subdomain www to non-www redirect RewriteCond %{HTTP_HOST} ^www\.static\.example\.com [NC] RewriteRule (.*) https://static.example.com/$1 [L,R=301] # HTTP to HTTPS redirect RewriteCond %{HTTPS} !=on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
  • Paldies, bet ko jūs precīzi domājat ar "mainīt šos divus noteikumus"? Kā kodam vajadzētu izskatīties?
  • Jūsu piemērā ir divi kodu bloki. Vispirms ielieciet otro. (Atvainojiet, brīdi, kad es esmu mobilajā ierīcē - rediģēšana ir neērta.)
  • Tātad tam vajadzētu izskatīties šādi (lūdzu, pārbaudiet rediģēto ziņu)?
  • Jā, tieši tā. Esmu atjauninājis savu atbildi.
  • Paldies! Vēl viens jautājums: Man ir arī apakšdomēns - static.example.com (nav www). Es gribētu šeit pievienot SSL un novirzīt WWW uz citu, nevis WWW (tagad lietotāji var piekļūt vietnei arī caur www, beidzot ar tādu URL kā www.static.example.com). Es izmēģināju kaut ko līdzīgu EDIT2 (es tikko rediģēju savu ierakstu). Vai varat pateikt, kas ir nepareizs ar šo kodu?

strādāja par jums: Charles Robertson | Vēlies ar mums sazināties?