Redirect to https for certain url only for wordpress site

I’m working on a wordpress site. And just installed SSL. It has been installed correctly but I want to redirect visitors to the https url for certain pages only. I also want to force browser to use http for other pages.

I know this can be done with .htaccess and tried several things as well. But unable to get this as I need. I’m a novice at handling .haccess rewrite rules and can’t find the docs that can guide me.

Read More

For example, I need to force browser to use https for this two urls:
http://www.example.com/sells/payment/
http://www.example.com/customer/login/

and for all other urls to just use normal http forcefully. What kind of rules I need to write?

Update 1

I also have a rule that redirects non-www url to a www url, and that might be conflicting with these rules. Here is how I redirect all non-www urls to www urls.

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

The issue I’m facing is, after applying https rules, it is redirected to https://www.www.example.com/sells/payment/ which is a wrong url.

Any idea for fixing this?

Related posts

Leave a Reply

3 comments

  1. Enable mod_rewrite and .htaccess through httpd.conf and then put this code in your .htaccess under DOCUMENT_ROOT directory:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^(sells/payment|customer/login)/ - [E=MY_URL:1]
    
    RewriteCond %{HTTPS} off
    RewriteCond %{ENV:MY_URL} 1
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
    
    RewriteCond %{HTTPS} on
    RewriteCond %{ENV:MY_URL} !=1
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
    

    UPDATE:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^(sells/payment|customer/login)/ - [E=MY_URL:1]
    
    RewriteCond %{HTTPS} off
    RewriteCond %{ENV:MY_URL} 1
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
    
    RewriteCond %{HTTPS} on
    RewriteCond %{ENV:MY_URL} !=1
    RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
    
  2. This what I’ve used consistently across my projects where I have similar use-cases as yourself:

    RewriteCond %{SERVER_PORT}s ^(443(s)|[0-9]+s)$
    RewriteRule ^(.+)$ - [env=askapache:%2]
    
    # redirect urls with index.html to folder
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^/]+/)*index.html HTTP/
    RewriteRule ^(([^/]+/)*)index.html$ http%{ENV:askapache}://%{HTTP_HOST}/$1 [R=301,L]
    
    # change // to /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /(.*)//(.*) HTTP/ [NC]
    RewriteRule ^.*$ http%{ENV:askapache}://%{HTTP_HOST}/%1/%2 [R=301,L]
    

    This is an excerpt from a site where I found the solution, so I can’t take credit for it:
    Smart HTTP and HTTPS .htaccess Rewrite

  3. I haven’t tried it, but can you handle it the same way you do cononcial URLs?

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.com/your-page
    RewriteRule (.*) https://www.example.com/your-page [R=301,L]