Forum Discussion

Mike_Roe_60070's avatar
Mike_Roe_60070
Icon for Nimbostratus rankNimbostratus
Feb 18, 2011

URL and 301 Re-Write

Hi All, Im hoping someone can help me out. I have a need to have one site (which has SSO with APM) be known in the world as 8. In this instance the site my.company.com has an SSO profile that is tied to the domain name company.com but, by way of another virtual in front of it I need addresses look like “my.company1.com” and “my.company2.com”. So for the SSO to work I have to replace the host which I have been able to do like this:

 

 

when HTTP_REQUEST {

 

HTTP::header replace Host "my.company.com"

 

virtual my_jboss_sb_vs

 

}

 

 

I think I have this part working but, in the response I am getting 301’s and it is breaking the solution. Im guessing I can use HTTP::header is_redirect which I found in my searching but, im not sure how to get it done.

 

 

In a netshell this is needed because all of our apps run on 1 domain “company.com” but, our company is known by many names/domains. We need our customers to think they are on the name they are familiar with throughout their web session so If they come to http://my.company25.com/app1 they dont get a redirect to http://my.company.com/app1. But in actuality they are using the app at the address http://my.company.com/app1.

 

 

Thanks in advance

 

 

  • Hi Mike,

     

     

    You could use the full ProxyPass iRule to rewrite the external hostname to the internal one on requests and "undo" the rewriting on response headers and/or payload.

     

     

    http://devcentral.f5.com/wiki/default.aspx/iRules/ProxyPassV10.html

     

     

    Or you could use a simplified version. This post has a 9.x example, but it could be updated fairly easily for 10.x.

     

     

    http://devcentral.f5.com/Forums/tabid/1082223/asg/50/showtab/groupforums/aff/5/aft/19917/afv/topic/Default.aspx

     

     

    Aaron
  • Thnaks Aaron, I had just gotten something similar working as you were replying.

    
    when ACCESS_ACL_ALLOWED {
    set sid [ACCESS::session data get "session.keydb"]
            HTTP::cookie insert name "MRHSession" value "$sid"
    
    }
     when HTTP_REQUEST { 
    set origHeader [HTTP::header Host]
     log local0. "Origional header value: $origHeader"
        HTTP::header replace Host "mysb.winwholesale.com" 
     log local0. "New header value: [HTTP::header Host]"
    virtual my_jboss_sb_vs
     }
     
    when HTTP_RESPONSE {
    if { [HTTP::is_redirect] } {
          if { [HTTP::header Location] contains "mysb.winwholesale.com" } {
             log local0. "Original Location value: [HTTP::header Location]"
            HTTP::header replace Location [string map -nocase {mysb.winwholesale.com sb.winnelson.com} [HTTP::header value Location]]
     log local0. "New Location value: [HTTP::header Location]"
          }
       }
    } 
     

    This works but it will only work for 1 out of 8 domains. What I mean is that since I have the SSO in play which i believe uses the MRHSession that is set in the ACCESS_ACL_ALLOWED section I need to reuse the same MRHSession when I change domains. In this rule my goal is to be able to type *.winnelson.com/anyuri or *.winair.com/anyuri and either way i get to mysb.winwholesale.com/anyuri.

    Im thinking I can do it if I can switch out the domain on the way in and out but i cant figure out how to let the response know what the hostname was in the origional request.

    Hope this makes sense.