Sitecore for Developers
Sitecore URL Rewrite Backreferences
Last night, my colleague John Kurtis inquired about the Sitecore URL Rewrite module and asked:
Hey – I’m trying to redirect
Downloads/autoupdate/* to the same path on another domain.
Eg
Downloads/autoupdate/some folder/foo.xml would go to http://www.domain.com/downloads/autoupdate/some folder/foo.xml
How can I do that with the module?
There are 2 kinds of backreferences, each one with its own token format:
- Rule – {R:n} – pattern matches in the rule
- Condition – {C:n} – pattern matches in the condition
First, you need to understand regex capture groups. A regex capture group is signified by a parenthesis in the regex. If you head over to www.regexr.com and enter /foo(.*)bar/g as the expression, you can see what I’m talking about:
Here are the matches explained.
When it encounters “foo@demo.net bar”, the capture group is “@demo.net “:
When it encounters “foo.html?q=bar”, the capture group is “.html?q“:
In the URL Rewrite module, the {R:0} would signify use the rule pattern match’s first capture group. Remember, this is the information age and things are of a zero-based index.
Using the URL Rewrite module, I can create the following rule to redirect everything to a different domain that is under a specific subpath:
In the rule, specify the pattern as downloads\/autoupdate\/foo(*). This means to match on url’s where the path begins with downloads/autoupdate/foo and ends with anything.
In the redirect, specify the url to be http://mynewdomain/mynewpath/downloads/autoupdate/foo{R:0}. This means to redirect to the new url, but replace the backreference token with the matched capture group from the rule.
Using my simlulation tool, you can see it work as follows:
Remember, my module was based on IIS Url Rewrite, so if you have any other questions you can use the IIS Url Rewrite documentation. Here is the specific link to IIS URL Rewrite back reference configuration. Alternatively, you can contact me directly.