Forum Discussion
Lolo_17756
Nimbostratus
Feb 08, 2010iRule Rewrit URI
Hello i' m has newbee in BigIp world.
I need to modify an URI in the following way:
URi Users = https://hostname/(S(session number))/blabla/blabla.xxx
It is possible to rewrite this URI with iRules like these:
https://hostname/blabla/blabla.xxx
Verry thanks for your help
Laurent
7 Replies
- The_Bhattman
Nimbostratus
Hi Lolo,
Looking at the original URI I am going to make some assumption that you basically want to strip out the session number? Also the blabla.xxx is the some kind of file where .xxx is the extension. I am also assuming that the LTM is terminating the SSL Connection.
If that is the case the iRule would look something like the following:when HTTP_REQUEST { if { [HTTP::host] eq "hostname")} { HTTP::redirect "https://[HTTP::host][URI::path [HTTP::uri] 2][URI::basename [HTTP::uri]]" } }
To break this down:
HTTP::host will contain the hostname of the URL
[HTTP::uri] = the entire URI "/(S(session number))/blabla/blabla.xxx"
[URI::path [HTTP::uri] 2] = will look at the path depth at 2. This will result in finding /blabla
[URI::basename [HTTP::uri]] = will look for the basename of the path which is "blabla.xxx"
Here is a article that talks about parsing a URI (Click here)
I hope this helps
Bhattman - Lolo_17756
Nimbostratus
Verry thanks for your quick response. All the best
Gotham City is save
Lolo - The_Bhattman
Nimbostratus
Post up your results when you have confirmed whether it has worked or not.
Bhattman - hoolio
Cirrostratus
Another option for removing the first string between forward slashes is to use scan (Click hereüòûwhen HTTP_REQUEST { Read in everything after the first / that is not a /. Save that to $session_id and everything else to $uri_to_save scan [HTTP::uri] {/%[^/]%s} session_id uri_to_save Rewrite the URI without the session ID HTTP::uri $uri_to_save }
Here is an example:
% set uri /my_session_id_string/path/to/preserve?query=string
/my_session_id_string/path/to/preserve?query=string
% scan $uri {/%[^/]%s} session_id uri_to_save
2
% puts $uri_to_save
/path/to/preserve?query=string
% puts $session_id
my_session_id_string
Aaron - Lolo_17756
Nimbostratus
It's OK and i have add filter on file extention:
when HTTP_REQUEST
{
set url [HTTP::uri]
if {[string tolower $url] matches_regex {/\(s\(.*\.(gif|js|css|jpg|bmp)}}
{
scan [HTTP::uri] {/%[^/]%s} session_id uri_to_save
Rewrite the URI without the session ID
log local0. "$session_id"
HTTP::uri $uri_to_save
}
}
Thanks all - hoolio
Cirrostratus
It would be more efficient to use switch and string comparisons to check the object type versus a regex. Here is an example:when HTTP_REQUEST { Check the requested path (URI minus query string) switch -glob [string tolower [HTTP::path]] { "*.gif" - "*.js" - "*.css" - "*.jpg" - "*.bmp" { Read in everything after the first / that is not a /. Save that to $session_id and everything else to $uri_to_save scan will return the number of matches if {[scan [HTTP::uri] {/%[^/]%s} session_id uri_to_save] == 2}{ Rewrite the URI without the session ID log local0. "$session_id" HTTP::uri $uri_to_save } } } }
Aaron - Lolo_17756
Nimbostratus
The last script work verry fine
thanks
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects