Forum Discussion

Jay_Webb's avatar
Jay_Webb
Icon for Nimbostratus rankNimbostratus
Aug 20, 2024

iRule - redirection and capturing a string value

Looking for suggestions regarding the capture of a value and injecting that into a new URL / URI  (the value below (3745) is dynamic. 

 

https://www.site1.com/aaaa/sc-dsp.jsp?rc=3745&lang=eng

Redirects to: 

https://www.site2.com/en/Office?posui=3745

 

 

  • This seems like a good GPT kind of question. It seems to have come up with a decent answer. Try it out. The example gives a 301 type of redirect which the browser will remember. For testing you'll want to use 302 so your browser will try the original URL each time, then switch it to 301 once you're satisfied that it works well.

     

    me:

    Write an iRules function that captures the request HTTP URL and responds with a redirect to a different site. The request HTTP URL has a dynamic number in it that we need to use to build the redirect URL string.

    This is an example of the request URL that we will receive, note the number "3745": ```https://www.site1.com/aaaa/sc-dsp.jsp?rc=3745&lang=eng```. 

    We need to transform it to one like this: ```https://www.site2.com/en/Office?posui=3745```

     

    gpt:

    Certainly! Below is an iRule that captures the request HTTP URL, extracts the dynamic number (3745 in your example), and responds with a redirect to the new site using that number.

    when HTTP_REQUEST {
        # Log the original request URL for debugging purposes
        log local0. "Original URL: [HTTP::uri]"
        
        # Extract the dynamic number from the request URL
        if {[HTTP::uri] matches_regex {rc=(\d+)}} {
            set rc_number [findstr [HTTP::uri] "rc=" 3 "&"]
            log local0. "Extracted rc number: $rc_number"
            
            # Construct the new redirect URL
            set new_url "https://www.site2.com/en/Office?posui=$rc_number"
            log local0. "Redirecting to: $new_url"
            
            # Send the redirect response
            HTTP::respond 301 Location $new_url
        } else {
            log local0. "The request URL does not contain the expected pattern."
        }
    }

    ### Explanation

    1. **Logging the Original URL**: This helps in debugging by logging the original request URL.
       
    2. **Extracting the Dynamic Number**:
        - The `matches_regex` function checks if the URL contains the pattern `rc=(\d+)`.
        - The `findstr` function is used to extract the dynamic number. It finds the string "rc=" and then captures the digits following it until it hits the "&" character.

    3. **Constructing the Redirect URL**: The new URL is constructed using the extracted dynamic number.

    4. **Sending the Redirect Response**: The `HTTP::respond` function sends a 301 (Moved Permanently) redirect to the new URL.

    This iRule should be applied to the relevant virtual server on your BIG-IP system. Make sure to test it in a controlled environment before deploying it to production to ensure it works as expected.