Forum Discussion

theizer_91634's avatar
theizer_91634
Icon for Nimbostratus rankNimbostratus
Apr 01, 2009

multiple redirects - newb needs help

ok...trying my hand at iRules

 

 

we own domain.com and domain.net

 

 

I need my rule to redirect the following:

 

1. http://domain.com to https://www.domain.com

 

2. http://domain.net to https://www.domain.com

 

3. http://[anything].domain.net to https://www.domain.com

 

4. http://[anything not "www"].domain.com to https://www.domain.com

 

5. http://www.domain.com/[path] to https://www.domain.com/[path]

 

 

Here is what I have so far. I know I am missing a lot and would really appreciate any help you guys can give.

 

 

when HTTP_REQUEST {

 

if {[HTTP::uri] equals {http://domain.com}} {HTTP::redirect https://www.domain.com

 

}

 

elseif {[HTTP::request] contains "domain.net"} {HTTP::redirect https://www.domain.com

 

}

 

else

 

{HTTP::redirect https://[HTTP::host][HTTP::uri]}

 

}

 

3 Replies

  • Hi,

    One problem is the domain.com, domain.net, etc is not part of [HTTP::uri], it's the [HTTP::host]. URI is the rest of the URL after the host, so your first check would need to be against [HTTP::host] without the http://.

    That said, I think you could just do:

      
     when HTTP_REQUEST {   
        if { not [HTTP::host] equals "www.domain.com" }{  
         HTTP::redirect "https://www.domain.com"    
        } else {  
         HTTP::redirect "https://www.domain.com/[HTTP::uri]"  
        }  
     }  
     

    Denny
  • Thanks for the reply!

     

    I tried your suggestion, but I think I may have something wrong with syntax as nothing redirects when I apply this rule. The iRule editor says it is valid though.

     

     

     

    when HTTP_REQUEST {

     

    if { not [HTTP::host] equals "www.domain.com" }{

     

    HTTP::redirect https://www.domain.com

     

    } else {

     

    HTTP::redirect https://[HTTP:host][HTTP::uri]

     

    }

     

    }
  • Try wrapping the condition you're NOT'ing in parentheses:

      
      when HTTP_REQUEST {  
         if { not ([string tolower [HTTP::host]] equals "www.domain.com") }{  
            HTTP::redirect https://www.domain.com  
         } else {  
            HTTP::redirect "https://[HTTP:host][HTTP::uri]" 
         }  
      }  
     

    Or this way:

      
      when HTTP_REQUEST {  
         if { [string tolower [HTTP::host]] equals "www.domain.com" }{  
            HTTP::redirect https://[HTTP:host][HTTP::uri]  
         } else {  
            HTTP::redirect "https://www.domain.com" 
         }  
      }  
      

    Also, because of a bug in the iRule parser in pre-v10 versions, make sure to always wrap // in double quotes. See SOL7988 for details:

    SOL7988: The iRule parser may fail to correctly parse and load an iRule from the command line (Click here)

    Aaron