.htaccess 301 redirect for all https to http EXCEPT ONE PAGE .htaccess 301 redirect for all https to http EXCEPT ONE PAGE apache apache

.htaccess 301 redirect for all https to http EXCEPT ONE PAGE


Apache/2.2.6 (Win32) mod_ssl/2.2.8 OpenSSL/0.9.8g PHP/5.2.6

I've tested it locally, all use cases seem to work fine. If you have further questions, feel free to ask.

# Rewrite Rules for example.comRewriteEngine OnRewriteBase /# Redirect from example.com to www.example.comRewriteCond %{HTTP_HOST} ^example\.com [NC]RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]# Turn SSL on for paymentsRewriteCond %{HTTPS} offRewriteCond %{SCRIPT_FILENAME} \/payments\.php [NC]RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]# Turn SSL off everything but paymentsRewriteCond %{HTTPS} onRewriteCond %{SCRIPT_FILENAME} !\/payments\.php [NC]RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

IMPORTANT! When the user navigates from any https page with www to any https page without www, he's asked to accept security certificate of your non-www domain.

For example (YES = request to accept the certificate, NO - opposite):

1) https://www.asdf.com/payments.php - YES (www.asdf.com)2) http://www.asdf.com/phpinfo.php - NO3) https://asdf.com/phpinfo.php - YES (asdf.com)4) https://www.asdf.com/phpinfo.php - NO

I tried to reorder rules in .htaccess with no success. If anyone finds a better solution, it'll be highly appreciated.


in addition to william's great solution, you can negate request uri somewhere before https rewriterule

RewriteCond %{REQUEST_URI} !^/?payments\.php


That was a nice post and it seems to redirect to http properly but i want some thing like the following

RewriteCond %{HTTP_HOST} ^site\.comRewriteRule (.*) http://www.site.com/$1 [R=301,L]#RewriteCond %{SERVER_PORT} !^443$#RewriteRule ^products https://www.site.com/products/ [R=301,L]# Disable SSL on pages other than payments.phpRewriteCond %{HTTPS} onRewriteCond %{REQUEST_URI} !^productsRewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]# Require SSL on payments.phpRewriteCond %{HTTPS} !onRewriteCond %{REQUEST_URI} ^products\/?$RewriteRule ^(.*)$ https://www.site.com/$1 [R=301,L]RewriteCond $1 !^(index\.php|images|js|css|static|img|payment|robots\.txt|blank.gif)RewriteRule ^(.*)$ index.php/$1 [L]

my url is http://www.sitename.com and the trailing forward slash is optionalwhat i need is if there is no text like products in the url then it needs to he http://and if there is a string products in the uri then it should be https://

how to do that...when i tried it is going to a loop... redirection loop.

i am using codeigniter frame work and i have removed index.php from the url.

so if something like http://sitename.com/products occurred then i want it to be https://sitename.com/products

and if there no products in the url then it should redirect to http://