When you declare a variable within the default rule's variables
array, you have an option to specify an initial value or leave it empty. You can then assign a value to a chosen variable or change its current value using the setVariable
behavior. Place the behavior anywhere as appropriate within the rule tree.
This example assigns the value of the built-in AK_EXTENSION
variable to store the request's file extension in a user variable named EXT
. To assign a variable, specify the variableName
you want to modify, specify the valueSource
as EXPRESSION
, then as the variableValue
inject the built-in variable using the same syntax as in any other option field. In this example, setting the TRANSFORM
to NONE
means you don't yet want to change the value.
{
"name": "setVariable",
"options": {
"variableName": "PMUSER_EXT",
"valueSource": "EXPRESSION",
"variableValue": "{{builtin.AK_EXTENSION}}",
"transform": "NONE"
}
}
The matchVariable
criteria allows you to test a variable's value at runtime. This example set of criteria
tests if the request is for a filename with no extension, but requiring a filename and thus excluding any directory-style URLs that end with a slash character:
"criteriaMustSatisfy": "all",
"criteria": [
{
"name": "matchVariable",
"options": {
"variableName": "AK_FILENAME",
"mode": "IS_NOT_EMPTY"
}
},
{
"name": "matchVariable",
"options": {
"variableName": "PMUSER_EXT",
"mode": "IS_EMPTY"
}
}
]
While the
matchVariable
criteria offers a way to account for known error scenarios, see the Debug variables section for more information on thevariableError
criteria, which allows you to detect other unforeseen error scenarios that only reveal themselves at runtime.
In response to the test criteria
above, one of the rule's accompanying behaviors
may assign a static EXPRESSION
of html
for use as a default file extension:
{
"name": "setVariable",
"options": {
"variableName": "PMUSER_EXT",
"valueSource": "EXPRESSION",
"variableValue": "html",
"transform": "NONE"
}
}
You can assign values from many other sources besides built-in system variables. Setting the setVariable
behavior's valueSource
to EXTRACT
gives you the option to assign more specific values from the request. The extractLocation
may specify header, cookie, and query parameter names, certificates, path directory components, and any embedded path parameters. Setting extractLocation
to EDGESCAPE
allows you to leverage a great deal of location-based data based on this request. The sample behaviors below assign the client request's geographic location to a pair of LAT
and LONG
variables.
{
"name": "setVariable",
"options": {
"variableName": "PMUSER_LAT",
"valueSource": "EXTRACT",
"extractLocation": "EDGESCAPE",
"locationId": "LAT",
"transform": "NONE"
}
},
{
"name": "setVariable",
"options": {
"variableName": "PMUSER_LONG",
"valueSource": "EXTRACT",
"extractLocation": "EDGESCAPE",
"locationId": "LONG",
"transform": "NONE"
}
}
In addition, when the valueSource
is set to GENERATE
, you can incorporate various random numbers and hex strings into variables. See the setVariable
behavior for details on all the sources of information you can assign to variables.