Forum Discussion

Tom_Lauwereins_'s avatar
Tom_Lauwereins_
Icon for Nimbostratus rankNimbostratus
Mar 28, 2011

TargetURL issue

I have an issue with "target URL"

 

When goiing to https://www.foo.com/abc

 

The webserver is redirecting for authenticating to https://www.foo.com/login.jsp?targetURL=http://www.foo.com/abc

 

Is it possible to rewrite the URL (via iRules) so the target URL is https://www.foo.com/abc instead of http://www.foo.com/abc

 

Now it happens on an apache with 'proxypassreverse'

 

Any suggestion?

 

 

Tom

 

5 Replies

  • Hi Tom,

    Yes you should be able to do this with the following untested iRule

    
    when HTTP_RESPONSE {  
         set $find "http://www.foo.com/abc"
         set $replace "https://www.foo.com/abc"
    
           if {[HTTP::is_redirect] and [HTTP::header value Location] contains "?targetURL=http://www.foo.com/abc"} { 
                HTTP::header replace Location [string map -nocase [-list $find $replace ] [HTTP::header value Location]] 
           } 
    }
    

    I hope this helps

    Bhattman
  • A got an error:

     

     

    error: line 5: [undefined procedure: -list] [-list $find $replace ]

     

    Any idea
  • 
    when HTTP_RESPONSE {  
         set find "http://www.foo.com/abc"
         set replace "https://www.foo.com/abc"
           if {[HTTP::is_redirect] and [HTTP::header value Location] contains "?targetURL=http://www.foo.com/abc"} { 
                HTTP::header replace Location [string map -nocase [-list $find $replace ] [HTTP::header value Location]] 
           } 
    }

     

     

    The variables for find and replace were not set right. The code above should be what you need.
  • Just remove the dash in front of list:
    [string map -nocase [list $find $replace] [HTTP::header value Location]
    

    Also note that the "$" should not be present on the two set commands. In TCL shell:

    % set find "http://www.foo.com/abc"
    http://www.foo.com/abc
    % set replace "https://www.foo.com/abc"
    https://www.foo.com/abc
    % set location "Location: http://www.foo.com/abc/home.html"
    Location: http://www.foo.com/abc/home.html
    % string map [list $find $replace] $location
    Location: https://www.foo.com/abc/home.html
    

    Note that setting the variables not only takes up unnecessary cpu/memory, but it also requires the list command in the string map, which takes extra cpu cyles. Would be better just to define them unless there are multiple potential matches. This would be shortened to:

    when HTTP_RESPONSE {  
           if {[HTTP::is_redirect] and [HTTP::header value Location] contains "?targetURL=http://www.foo.com/abc"} { 
                HTTP::header replace Location [string map -nocase {"http://www.foo.com/abc" "https://www.foo.com/abc"} [HTTP::header value Location]] 
           } 
    }
    

    HTH...Jason

  • looks like Joel beat me to the punch, but you still need to remove the "-" in front of list as well as removing the "$" from the set commands.