HTACCESS met SSL certificaat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Donald Boers

Donald Boers

14/04/2018 14:14:00
Quote Anchor link
Ik heb gisteren een SSL certificaat voor een bepaald domein aangeschaft. Om het een en ander werkend te maken dien ik volgens de beschrijving de volgende regels (Cond & Rule) aan mijn HTACCESS toe te voegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]


Zelf heb ik de volgende Rule in mijn HTACCESSS staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
RewriteRule ^ index.php [QSA,L]

Waarbij index.php belangrijk is voor de werking van de site. Hoe combineer ik het een en ander?

Bij voorbaat dank
 
PHP hulp

PHP hulp

19/04/2024 22:13:46
 
- Ariën  -
Beheerder

- Ariën -

14/04/2018 14:16:00
Quote Anchor link
Gewoon beiden erna, zoals je nu hebt!
Je wilt eerst altijd regel uitvoeren om alles naar je https:// protocol te sturen.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/04/2018 16:54:06
Quote Anchor link
Wat @Ariën zegt. Het .htaccess bestand wordt van boven naar beneden doorgelezen en verwerkt.

Wanneer een RewriteRule vooraf wordt gegaan door een RewriteCond houdt dat in dat alleen wanneer aan de conditie wordt voldaan de rule wordt uitgevoerd. De eerste stap in het doorlopen van je .htaccess-bestand zou dus inderdaad het overschakelen naar HTTPS moeten zijn, als je dit wilt forceren.

De [L] flag zorgt er normaal voor dat zodra er een RewriteRule (met of zonder condities) is uitgevoerd dat het herschrijf-proces stopt.

De [R] flag zorgt voor... een redirect :) - de pagina wordt opnieuw aangeroepen (met de nieuwe URL) en het .htaccess-bestand wordt weer vanaf het begin doorlopen. Na de redirect wordt de eerste rule niet meer uitgevoerd omdat niet wordt voldaan aan de conditie, je zit nu immers al op HTTPS. Vervolgens wordt de tweede rule direct uitgevoerd, omdat deze verder geen condities heeft.

Stomtoevallig was ik hier net iets over aan het uitzoeken, de snippet die ik hierbij voorbij zag komen zag er als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Het enige verschil is in wezen de redirect-status (301 = definitief verplaatst). Dit is mogelijk beter dan de standaard status (302 = tijdelijk verplaatst) als het je plan is om alles permanent te verhuizen naar de HTTPS-variant.

Zie ook de > Apache RewriteRule Flags documentatie.

EDIT: het overstappen van HTTP naar HTTPS is ook een beetje een migratietraject, het is meer dan enkel een schakelaar omgooien, zoals het bovenstaande illustreert. Content heeft mogelijk "krediet" opgebouwd (bij zoekmachines), je moet er dan ook zorg voor dragen dat de transitie goed verloopt.
Gewijzigd op 14/04/2018 17:14:27 door Thomas van den Heuvel
 
Willem vp

Willem vp

15/04/2018 13:04:27
Quote Anchor link
Quote:
Het enige verschil is in wezen de redirect-status (301 = definitief verplaatst). Dit is mogelijk beter dan de standaard status (302 = tijdelijk verplaatst) als het je plan is om alles permanent te verhuizen naar de HTTPS-variant.

Ik word nooit zo enthousiast van 301-redirects. Heb daar slechte ervaringen mee, omdat veel browsers die redirects ook daadwerkelijk permanent cachen, en als het ooit eens nodig zou zijn om die redirect ongedaan te maken of te wijzigen, heb je een behoorlijke uitdaging om alle browsercaches leeg te maken van iedereen die ooit je site heeft bezocht. ;-)

Als je een site permanent op HTTPS wilt hebben, zou het mijn voorkeur hebben om op de HTTP-variant een 307-redirect te zetten (heeft mijn voorkeur boven een 302) en op je HTTPS-site een HSTS-header mee te geven:

Header always set Strict-Transport-Security "max-age=15768000;"
 
Donald Boers

Donald Boers

17/04/2018 10:50:19
Quote Anchor link
Hi @Ariën, @Thomas van den Heuvel en @Willem vp. Sorry voor de wat late reactie. Ik was een paar dagen afwezig. Bedankt allle drie voor de reactie. @@Thomas van den Heuvel Ik heb nog een vraagje hierover. In de openings post noemde ik alleen de RewriteRule die ik momenteel gebruik maar daar is ook de volgende RewriteCond aan gekoppeld. Dit is de complete HTACCESS zoals ie was
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
 
Thomas van den Heuvel

Thomas van den Heuvel

17/04/2018 10:56:05
Quote Anchor link
De volgorde is meestal zoiets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<zet engine aan>
<conditie>
<rule>

<conditie>
<rule>

<rule>
<etc>


Met de notities van @Willem wordt het dus zoiets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
RewriteEngine On
# zoals aangegeven, eerst schakelen naar HTTPS
# gebruik eventueel (initieel) 307 i.p.v. 301
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# als we op HTTPS zitten business as usual
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.