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

后端 未结 4 1758
天命终不由人
天命终不由人 2020-12-01 13:12

Here is the code I have currently in my .htaccess file:

Options +FollowSymLinks 
RewriteEngine on
RewriteBase / 
RewriteCond %{HTTP_HOST} ^example.com [NC] 
         


        
相关标签:
4条回答
  • 2020-12-01 13:33
    # Rewrite Rules for example.com
    RewriteEngine On
    RewriteBase /
    
    # Redirect from example.com to www.example.com
    RewriteCond %{HTTP_HOST} ^example\.com [NC]
    RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
    
    # Disable SSL on pages other than payments.php
    RewriteCond %{HTTPS} on
    RewriteCond %{REQUEST_URI} !^payments\.php$
    RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
    
    # Require SSL on payments.php
    RewriteCond %{HTTPS} !on
    RewriteCond %{REQUEST_URI} ^payments\.php$
    RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
    

    I haven't tested it but something like that should work

    Edit: Updated

    0 讨论(0)
  • 2020-12-01 13:43

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

    RewriteCond %{REQUEST_URI} !^/?payments\.php
    
    0 讨论(0)
  • 2020-12-01 13:43

    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\.com
    RewriteRule (.*) 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.php
    RewriteCond %{HTTPS} on
    RewriteCond %{REQUEST_URI} !^products
    RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
    
    # Require SSL on payments.php
    RewriteCond %{HTTPS} !on
    RewriteCond %{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 optional what 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://

    0 讨论(0)
  • 2020-12-01 13:57

    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.com
    RewriteEngine On
    RewriteBase /
    
    # Redirect from example.com to www.example.com
    RewriteCond %{HTTP_HOST} ^example\.com [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    
    # Turn SSL on for payments
    RewriteCond %{HTTPS} off
    RewriteCond %{SCRIPT_FILENAME} \/payments\.php [NC]
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    
    # Turn SSL off everything but payments
    RewriteCond %{HTTPS} on
    RewriteCond %{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 - NO
    3) 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.

    0 讨论(0)
提交回复
热议问题