How do I enable https only on certain pages with htaccess?
Try this in your .htaccess file:
Options +FollowSymLinks
RewriteEngine on
# redirect for http /buy page
RewriteCond %{SERVER_PORT} =80
RewriteRule ^buy/?$ https://mysite.com/buy [R=301,QSA,L,NE]
# redirect for https non /buy pages
RewriteCond %{SERVER_PORT} =443
RewriteCond %{REQUEST_URI} !^/buy [NC]
RewriteRule ^/?(.*)$ http://mysite.com/$1 [R=301,QSA,L,NE]
R=301
will redirect with https status 301
L
will make last rule
NE
is for no escaping query string
QSA
will append your existing query parameters
NC
is for ignore case comparison
$1
is your REQUEST_URI
Jarred
Updated on June 17, 2022Comments
-
Jarred almost 2 years
I have an ecommerce site, and I want to enable https only on the ecommerce section of the site located at https://mysite.com/buy
Since all of the links on my pages are relative, when someone visits http://mysite.com and clicks on Buy, they are taken to http://mysite.com/buy
Also, if they visit https://mysite.com/buy and click on a link to another page, they are taken to https://mysite.com.
The reason I want https only on that one section is because I have external elements (i.e. Google Maps, Youtube, Twitter, etc) that cannot be sent over https.
Is there a way with htaccess that I can make the /buy directory force https, but every other page force http?
Edit: In case anyone is interested, I was able to solve this using PHP. I would still prefer an htaccess solution, but this will work for now:
if($_SERVER['HTTPS'] == "on") { if(strpos($_SERVER['REQUEST_URI'],"buy") === false) { Header("Location: http://$_SERVER['HTTP_HOST']."".$_SERVER['REQUEST_URI']"); } }
-
Jarred about 13 yearsThanks for the answer. The problem is that /buy is a rewritten URL, so the /buy folder doesn't actually exist.
-
elimisteve over 10 yearsYou can simplify
RewriteRule ^/?(.*)$ http://mysite.com/$1 [R=301,QSA,L,NE]
toRewriteRule (.*) http://mysite.com$1 [R=301,QSA,L,NE]