For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

DifanZ's avatar
DifanZ
Icon for Cirrus rankCirrus
Jul 13, 2021

irule for extracting a string from a URI

Hi experts,

I am new to irule and it doesn't look like I am allowed much time to learn it properly... In short, they want me to redirect to a URL when all the members in the pool are down. The problem is that the redirect URL will need some data from the original URL.

Original -> http://ecmqut.network.qut/ecmlivelink/llisapi.dll/open/168812040

Redirect to -> http://csintqut.network.qut:81/fsl/Redirect.aspx?docid=168812040

As you can see, the number string is what I need to extract from the original URL. Here is my irule (that's not working)

when HTTP_REQUEST {
  if { [active_members livelink_qut_tcp_8100_pool] < 1 } {
    set doc_id [regexp \\/open\\/\(\\d+\)\[0-9\] [HTTP::uri] ]
#    HTTP::redirect "http://outagemessage-qut.network.qut/"
    log local0. “http://csintqut.network.qut:81/fsl/Redirect.aspx?docid=$doc_id”
}
}

As you can see, I am not even redirecting right now. I am just logging it to make sure it comes out right and it doesn't... I am getting error like

http_process_state_prepend - Invalid action:0x109010 Server sends too much data. serverside

Please help...

Thanks,

Difan

4 Replies

    • DifanZ's avatar
      DifanZ
      Icon for Cirrus rankCirrus

      Hey thanks Jaspreet. yes the number is dynamic. The length is also random...

  • You can try below.

     when HTTP_REQUEST {
      if { ([string tolower [HTTP::uri]] starts_with "/ecmlivelink/llisapi.dll/open") and ([active_members livelink_qut_tcp_8100_pool] == 0) } {
      set doc_id [string range [HTTP::uri] 30 end]
      HTTP::respond 301 Location "http://csintqut.network.qut:81/fsl/Redirect.aspx?docid=$doc_id"
      return
     }
    }
    • DifanZ's avatar
      DifanZ
      Icon for Cirrus rankCirrus

      Thanks Sanjay. The length might be dynamic and there could be at least a slash at the end of the link.. I actually opened a case and I am provided with a regular expression code like this

      regexp "/open/(\[0-9\]+" $uri something doc_id

      This successfully got me the number, regardless of the pending characters. But thanks anyway for your help!