Forum Discussion
Duplicate URI redirection issue
URI redirection issue
we have URI redirection configured as below Internet URL- https://www.abcd.com/test/xyz Intranet URL-
Internet URL- https://www.abcd.com/testhij/xyz Intranet URL-
Along with this, we have client source IP based restriction at "/testhij/xyz"
As shown above since "xyz" URI exists in both URLs.
iRule1 used is as below when HTTP_REQUEST {set newuri [class match -value [HTTP::uri] equals DATAGROUP-REDIRECT ]} iRule2 used is as below
switch -glob [string tolower [HTTP::uri]] { "/xyz" { pool XYZ_pool } "/xyz" { if { [class match $forwarded_ip equals WIFI ] } { Process the traffic pool HIJ-Pool } else { drop
}
Datagroup "DATAGROUP-REDIRECT" defines
STRING: /testhij/xyz VALUE :/xyz
and
STRING: /test/xyz
VALUE :/xyz
Since URI "/xyz" is exist in both the request, we are not getting expected output.
Is there anyway, we can make it working ? Appreciate in advance.
- Stanislas_Piro2
Cumulonimbus
- Please post again the code here with right format (select the whole code and press TAB key, look in the Preview below the text if it is readable)
- We can't read in your head, can you please explain with examples what is the expected output and ;-)
- Why are you configuring 2 different irules instead of a merged code?
- Viv_Richards
Cirrostratus
URI redirection issue we have URI redirection configured as below Internet URL- https://www.abcd.com/test/xyz Intranet URL- Internet URL- https://www.abcd.com/testhij/xyz Intranet URL- Along with this, we have client source IP based restriction at "/testhij/xyz" As shown above since "xyz" URI exists in both URLs.
iRule1 used is as below
} iRule2 used is as below2. Set host as will be used to rewrite hardcoded http redirection links set host [HTTP::host] if { [HTTP::uri] equals "/" } { HTTP::uri "/reb/" } set newuri [class match -value [HTTP::uri] equals dg_redirect ] log local0.info "uri is [HTTP::uri]" if {$newuri ne ""} { HTTP::respond 302 Location "https://[HTTP::host]$newuri" Connection Close TCP::close event disable log local0. "[HTTP::uri] redirected to $newuri" unset newuri }
when HTTP_REQUEST { "bypass" tracks whether or not we made any changes inbound so we can skip changes on the outbound traffic for greater efficiency. set bypass 1 Initialize other local variables used in this rule set orig_uri "[HTTP::uri]" set orig_host "[HTTP::host]" set log_prefix "VS=[virtual name], Host=$orig_host, URI=$orig_uri" set clientside "" set serverside "" set newpool "" set ppass "" Source_IP_Detection_Option_28_Start if { [IP::version] == 4 } { set OPTION_28_IP [TCP::option get 28] if {[string length $OPTION_28_IP] > 0 } { set forwarded_ip [IP::addr parse $OPTION_28_IP 0] log local0. "IP Found in TCP Option 28: $OPTION_28_IP" } else { log local0. "Length Error in TCP Option 28 raw value: $OPTION_28_IP" } } log local0. "URI = [string tolower [HTTP::uri]]" log local0. "Client IP SNAT = [IP::client_addr]" log local0. "Client IP = $forwarded_ip" Source_IP_Detection_Option_28_Stop if {! [class exists $clname]} { log local0. "$log_prefix: Data group $clname not found, exiting." pool $default_pool return } else { set ppass [class match -element "$orig_host$orig_uri" starts_with $clname] if {$ppass eq ""} { Did not find with hostname, look for just path set ppass [class match -element "$orig_uri" starts_with $clname] } if {$ppass eq ""} { No entries found if { $static::ProxyDebug > 0 } { log local0. "$log_prefix: No rule found, using default pool $default_pool and exiting" } switch -glob [string tolower [HTTP::uri]] { "/xyz*" { pool xyz_pool } "/xyz*" { if { [class match $forwarded_ip equals WIFI ] } Process the traffic pool xyzhij_pool } else { Drop Connection HTTP::respond 200 content "Apology PageAccess Denied" log local0. "Non wifi IP detected and connection dropped" Pool xyzhij_pool }
====================================
From internet if URL requested as https://www.abcd.com/test/xyz, it should redirect to https://www.abcd.com/xyz and it should reach to so that it will be processed properly.
From internet if URL requested as https://www.abcd.com/testhij/xyz and if it is coming from specific source IPs then only it should get redirected to https://www.abcd.com/xyz and it should reach to so that it will be processed
In current scenario, since /xyz is overlapping, I would like overcome this overlapping
Recent Discussions
Related Content
* 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