Forum Discussion
301 Permanent HTTPS redirect
Hello,
I just updated an iRule for my HTTPS object as shown below, it now forwards https://cardiosmart.org to https://www.cardiosmart.org. What I need now is to modify further to incorporate a 301 permanent redirect into this same rule. I'm not sure where to include the "respond 301 location" though, would someone be able to assist?
Also, I do already have a "respond 301 location" included in an iRule for my HTTP object.
Thanks in advance!
Diane
Current iRule: when HTTP_REQUEST { if { [string tolower [HTTP::host]] contains "healthandwellness.cardiosmart.org" } { HTTP::redirect "https://www.cardiosmart.org[HTTP::uri]" } if { [string tolower [HTTP::host]] equals "cardiosmart.org" } { HTTP::redirect "https://www.cardiosmart.org[HTTP::uri]" } }
4 Replies
- dlogsdonmd
Nimbostratus
So, you suggest to write the rule as follows? To replace the "redirect" with "respond 301 Location" (without the quotes). Is that correct?
Thank you.
when HTTP_REQUEST { if { [string tolower [HTTP::host]] contains "healthandwellness.cardiosmart.org" } { HTTP::redirect "https://www.cardiosmart.org[HTTP::uri]" } if { [string tolower [HTTP::host]] equals "cardiosmart.org" } { HTTP::respond 301 Location "https://www.cardiosmart.org[HTTP::uri]" } } - Brad_Parker
Cirrus
I would use and elseif and put the one that gets hit the most as the first if. That will make the rule more efficient.
when HTTP_REQUEST { if { [string tolower [HTTP::host]] contains "healthandwellness.cardiosmart.org" } { HTTP::respond "HTTP/1.1 301 Moved Permanently\r\nLocation:https://www.cardiosmart.org[HTTP::uri]\r\nConnection: close\r\nContent-Length: 0\r\n\r\n" } elseif { [string tolower [HTTP::host]] equals "cardiosmart.org" } { HTTP::respond "HTTP/1.1 301 Moved Permanently\r\nLocation:https://www.cardiosmart.org[HTTP::uri]\r\nConnection: close\r\nContent-Length: 0\r\n\r\n" } } - dlogsdonmd
Nimbostratus
Thanks Brad. That looks a lot more complicated. What does all that mean? Sorry, I'm IT Ops, not developer so code is a foreign language to me. Thanks for any explanation/clarification you can provide.
And I believe the "healthandwellness" part would come second since I don't think that's highly used.
Thanks.
Diane
- Michael_Jenkins
Cirrostratus
Another method would be to use the switch statement instead of if. If you plan to add additional redirects in the future, it may look a little cleaner...
when HTTP_REQUEST { switch -glob -- [string tolower [HTTP::host]] { "cardiosmart.org" - "*healthandwellness.cardiosmart.org*" { HTTP::respond 301 Location "XXXXX[HTTP::uri]" return } } }Because the code block messes up hyperlinks, replace the XXXXX with https://www.cardiosmart.org.
In this case, the -glob says to allow wildcards in the checks, and you have two conditions (the second which uses the * wildcard) that will cause the HTTP redirect response. With this format, if you needed to add new hosts to redirect, you would just add a - at the end of the healthandwellness line and put the additional host on the next line.
Additional documentation regarding if/elseif/else and switch statements can be found here
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)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
