Tahtsin esitada oma veebisaidi enda Debiani Apache2 serveris HSTS-i eellaadimisloendisse.

See ütles mulle, et mul on mitu asja valesti seadistatud, nii et ma tegin kohandusi, nüüd näib see olevat rahul. On ainult üks asi, milles ma pole kindel, kuidas see töötab või kas ma olen seda õigesti teinud? Järgmine ümbersuunamise kood aadressile https ja www on paigutatud otse virtuaalse hosti konfiguratsioonifaili. Kas keegi võiks vaadata ja selgitada mulle, kuidas see töötab, ja kui on vigu, siis palun soovitage parandusi.

RewriteEngine on RewriteCond %{HTTPS} !on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301] RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R] 

MUUDA1:

Kõik selle koodi read paigutatakse HTTP-sse (port 80) jaotis.

EDIT2:

Ma pole kindel, kas riba eemaldada www või lisage see veel. Nii et oleks hea meel näha mõlemat lähenemist, kui seda pole nii raske rakendada.

paigutatakse otse virtuaalsesse hostisse

Aga kuhu täpselt? Kui olete SSL-i juurutanud, on teil ka vähemalt kaks VirtualHosti konteinerit, üks SSL / HTTPS (port 443) ja teine ​​HTTP (port 80) jaoks.

HTTP-HTTPS-i ümbersuunamise edukaks rakendamiseks peate need direktiivid paigutama 80. pordi VirtualHosti konteinerisse. Kui see on nii, siis kontrollige HTTPS on üleliigne. Aga ka siis, kui need direktiivid on ainult VirtualHostis pordi 80 jaoks ei toimu kanooniliseks muutmist www-st mitte-www-i mitte-kanoonilisele juurdepääsemisel https://www.example.com URL otse. (Või olete need direktiivid pannud mõlemasse VirtualHostsi? Mis on tarbetu.)

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301] 

Ilma L lipp, töötlemine jätkub. Kui taotlete http://www.example.com siis suunatakse see aadressile https://example.com. Tavaliselt on see OK, kuid see näib rikkuvat ühte HSTS-i eellaadimisloendi eeltingimusi, milles öeldakse, et peaksite suunama sama peremees. (Niisiis, on raske öelda, kuidas see näib HSTS-i eellaadimisloendi kriteeriumide täitmisel töötavat?)

%{SERVER_NAME} - kuigi see võib teie serveris hästi töötada, pole see antud juhul kõige usaldusväärsem muutuja, kuna soovite alati suunata samale hostile (mitte määratletud ServerName). Sa peaksid kasutama HTTP_HOST selle asemel siin, et tagada ümbersuunamine samale hostile, nagu on taotluses täpsustatud. (Vaikimisi serveri konfiguratsioonis SERVER_NAME on sama nagu HTTP_HOST, aga see sõltub sellest, kas UseCanoncialName on seatud.)

RewriteRule ^(.*)$ https://%1/$1 [R] 

Nagu @ltai juba oma vastuses mainis, on see ajutine (302) ümbersuunamine ja see peaks olema püsiv (301) ümbersuunamine. Teil on puudu ka L lipp, mis võib põhjustada probleeme, kui lisate hilisemad direktiivid.

Samuti põhjustab see VirtualHosti kontekstis kasutades topeltkriipsu RewriteRule asendaminent. https://example.com// alates pildistatud mustrist sisaldab kaldkriipsu eesliide (kontekstis VirtualHost). Oma esimeses RewriteRule, välistate konkreetselt kaldkriipsu prefiksi (st. ^/?(.*)); peaksite siin sama tegema.


Need direktiivid tuleks jagada kahe (või enama) VirtualHost'i vahel. Näiteks:

 ServerName example.com ServerAlias www.example.com # Unconditional redirect to HTTPS on the same host # (The 'same host' is a requirement of the HSTS preload list) RewriteEngine On RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]   ServerName example.com ServerAlias www.example.com # SERVER_NAME now refers to the value of ServerName, not HTTP_HOST UseCanonicalName On # Redirect from www to the canonical ServerName RewriteEngine On RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]  

Tavaliselt saavutaksite kanonikaliseerimise HTTP-st HTTPS-i ja www-st mitte-www-sse ühe ümbersuunamise abil. Kuid HSTS-i eellaadimisloendi nõue ütleb, et peaksite HTTP-l HTTPS-ile ümber suunama sama peremees, mis tähendab, et peate selle hoidma kahena. (Kui olete aga HSTS-i eellaadimisloendis, siis HTTP-st HTTPS-i ümbersuunamine ei juhtu kunagi.)

Ainus asi, mida ma muudaksin, on seatud ka viimane reegel, mis annab püsiva ümbersuunamise.

RewriteEngine on 

See rida ütleb, et lülitage sisse ümbersuunamismootor, ilma milleta ükski reegel ei töötaks.

RewriteCond %{HTTPS} !on 

See tähendab, et tingimus on, et skeem ei oleks https. See on sama, kui kasutaksite off vastandina !on mis on mitte sisse.

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301] 

See on reegel, mida käivitada, kui HTTPS EI OLE sisse lülitatud. Seal öeldakse, et võtke kõik pärast alguskriipsu (kui see on olemas) või URL-i kogu osa ja suunake sama serveriga HTTPS-i. Siin on vastus 301, mis on püsiv ümbersuunamine.

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 

Ülal olev rida ütleb, et tingimus on see, et võõrustajad alustavad www. ja et kõik pärast seda on tabatud järgmises reeglis kasutamiseks. Sellepärast on sellel (.*)

RewriteRule ^(.*)$ https://%1/$1 [R] 

See reegel ütleb, et suunata kõik taotlused aadressile https:// järgneb hosti osa, mis oli pärast www-d (% 1) ja seejärel päring ($ 1). Tulemuseks on 302 TemporaryRedirect, kuna te ei määranud tagastuskoodi nagu R=301 nagu tegite 2 rida kõrgemal.

Selle koodi juures on tore see, et te pole serveri või domeeninime kõvakoodile kirjutanud, seega on see üsna üldine ja seda võidakse kasutada mitmel saidil nii, nagu see on.

none: Charles Robertson | none