The urlplus vmod is a URL/query string normalization, parsing and manipulation VMOD. This VMOD allows you to get,
add, delete, and keep URL segments and query parameters. You can also sort query parameters.
vmod-urlplus keeps an internal representation of the URL up until it is written out.
Keep only the page_id.
vcl 4.0;
import urlplus;
sub vcl_recv
{
//Keep page_id
urlplus.query_keep("page_id");
//Sort query string and write URL out to req.url
//Any query that is not kept is not written to req.url
urlplus.write();
}
vcl 4.0;
import urlplus;
sub vcl_recv
{
//Remove all Google Analytics
urlplus.query_delete_regex("utm_");
//Sort query string and write URL out to req.url
urlplus.write();
}
random query parametervcl 4.0;
import urlplus;
sub vcl_recv
{
urlplus.query_delete("random");
// Write URL out to req.url without sorting
urlplus.write(sort_query = false);
}
req.urlvcl 4.0;
import urlplus;
sub vcl_recv
{
// Write URL out to req.url
urlplus.write();
}
Specify TTL by file type.
vcl 4.0;
import urlplus;
sub vcl_backend_response
{
//Give files with these extensions a TTL of 1 day
if (urlplus.get_extension() ~ "gif|jpg|jpeg|bmp|png|tiff|tif|img") {
set beresp.ttl = 1d;
}
}
VOID parse(STRING url)
Parse URL and query string. Any internal state is reset.
Arguments:
url accepts type STRINGType: Function
Returns: None
Restricted to: client, backend
VOID reset()
Reset the internal state.
Arguments: None
Type: Function
Returns: None
Restricted to: client, backend
VOID write(BOOL sort_query = 1, ENUM {NONE, KEY, KEY_VALUE} query_unique = NONE, ENUM {FROM_INPUT, TRUE, FALSE} leading_slash = FROM_INPUT, ENUM {FROM_INPUT, TRUE, FALSE} trailing_slash = FROM_INPUT, BOOL query_keep_equal_sign = 0)
Write URL back out to be/req.url. sort_query indicates the query string
should be sorted. sort_query defaults to TRUE. query_unique indicates
if the query string should be unique by either key or key and value. This is
done before sorting. The first occurrence is kept and each proceeding
occurrence is removed. Defaults to NONE. leading_slash has three states.
When set to TRUE, a leading slash will be added to the URL. When set to
FALSE, no leading slash will be added to the URL. When set to FROM_INPUT
a leading slash will be added or not depending on the way the original string
was parsed. trailing_slash follows the same rules except the slash
will be at the end of the URL. query_keep_equal_sign indicates that a trailing
equal sign should be kept when the query string value is empty.
Arguments:
sort_query accepts type BOOL with a default value of 1 optional
query_keep_equal_sign accepts type BOOL with a default value of 0 optional
query_unique is an ENUM that accepts values of NONE, KEY, and KEY_VALUE with a default value of NONE optional
leading_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
trailing_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
Type: Function
Returns: None
Restricted to: client, backend
STRING as_string(BOOL sort_query = 1, ENUM {NONE, KEY, KEY_VALUE} query_unique = NONE, ENUM {FROM_INPUT, TRUE, FALSE} leading_slash = FROM_INPUT, ENUM {FROM_INPUT, TRUE, FALSE} trailing_slash = FROM_INPUT, BOOL query_keep_equal_sign = 0)
Return the combined URL and query as a string. sort_query indicates the query string
should be sorted. sort_query defaults to TRUE. query_unique indicates if the
query string should be unique by either key or key and value. This is done before sorting.
The first occurrence is kept and each proceeding occurrence is removed. Defaults to NONE.
leading_slash has three states. When set to TRUE, a leading slash will be added to the URL.
When set to FALSE, no leading slash will be added to the URL. When set to FROM_INPUT a
leading slash will be added or not depending on the way the original string was parsed.
trailing_slash follows the same rules except the slash will be at the end of the URL.
query_keep_equal_sign indicates that a trailing equal sign should be kept when the query
string value is empty.
Arguments:
sort_query accepts type BOOL with a default value of 1 optional
query_keep_equal_sign accepts type BOOL with a default value of 0 optional
query_unique is an ENUM that accepts values of NONE, KEY, and KEY_VALUE with a default value of NONE optional
leading_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
trailing_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
Type: Function
Returns: String
Restricted to: client, backend
STRING get_basename()
Given /foo/bar.baz return the location’s basename (bar.baz). If no extension
is present, return the last URL segment.
Arguments: None
Type: Function
Returns: String
Restricted to: client, backend
STRING get_filename()
Given /foo/bar.baz return the location’s filename (bar). If no extension
is present, return NULL.
Arguments: None
Type: Function
Returns: String
Restricted to: client, backend
STRING get_extension()
Given /foo/bar.baz return the location’s extension (baz). If no extension
is present, return NULL.
Arguments: None
Type: Function
Returns: String
Restricted to: client, backend
STRING get_dirname()
Return a string with everything but the last segment. If only one segment, return /.
Given /foo/bar/bar.baz return the location’s directory (/foo/bar).
Arguments: None
Type: Function
Returns: String
Restricted to: client, backend
VOID tolower(ENUM {ALL, URL, QUERY} convert = ALL)
Convert the URL to lowercase. part_to_lower indicates which part of the URL will be converted.
If convert is set to URL only the URL will be converted. If set to QUERY only
the query string will be converted. If convert is set to ALL both the URL and
query string will be converted. convert defaults to ALL.
Arguments:
convert is an ENUM that accepts values of ALL, URL, and QUERY with a default value of ALL optional
Type: Function
Returns: None
Restricted to: client, backend
VOID toupper(ENUM {ALL, URL, QUERY} convert = ALL)
Convert the URL to uppercase. convert indicates which part of the URL will be converted.
If convert is set to URL only the URL will be converted. If set to QUERY only
the query string will be converted. If part_to_lower is set to ALL both the URL and
query string will be converted. convert defaults to ALL.
Arguments:
convert is an ENUM that accepts values of ALL, URL, and QUERY with a default value of ALL optional
Type: Function
Returns: None
Restricted to: client, backend
STRING query_get(STRING name = "", STRING def = 0, INT position = -1)
Return the value of query name. If not found, def is returned(NULL by default). Position
when set, ignores name, and returns the value of the query at position (starting from zero). Otherwise
returns def. Returns def when name is unset, and position is out of bounds. If both name and position
are set, position will be returned.
Arguments:
name accepts type STRING with a default value of empty. optional
def accepts type STRING with a default value of 0 optional
position accepts type INT with a default value of empty. optional
Type: Function
Returns: String
Restricted to: client, backend
STRING query_get_regex(STRING regex, STRING def = 0)
Return the value of query that matches regex. If not found, def is returned(NULL by default).
Arguments:
regex accepts type STRING
def accepts type STRING with a default value of 0 optional
Type: Function
Returns: String
Restricted to: client, backend
VOID query_add(STRING name, STRING value = "", BOOL keep = 1, INT position = -1)
Add a query of query, value with parameter keep. Value is NULL by default. keep is
1 by default. position is a base 0 integer. By default, position = -1 which will add the URL
segment to the end. Adding to position = 0 will add to the front of the list. Adding to
position = 1 will add to the second spot and so on.
Arguments:
name accepts type STRING
value accepts type STRING with a default value of empty. optional
keep accepts type BOOL with a default value of 1 optional
position accepts type INT with a default value of empty. optional
Type: Function
Returns: None
Restricted to: client, backend
VOID query_delete(STRING name, BOOL delete_keep = 0)
Delete all queries of name. If delete_keep is set to TRUE, kept queries
will also be removed. delete_keep is FALSE by default.
Arguments:
name accepts type STRING
delete_keep accepts type BOOL with a default value of 0 optional
Type: Function
Returns: None
Restricted to: client, backend
VOID query_delete_regex(STRING regex, BOOL delete_keep = 0)
Delete all queries matching regex. If delete_keep is set values of name with
keep set, will also be removed.
Arguments:
regex accepts type STRING
delete_keep accepts type BOOL with a default value of 0 optional
Type: Function
Returns: None
Restricted to: client, backend
VOID query_keep(STRING name)
Set keep to TRUE for all queries of name. This initiates keep_mode.
Arguments:
name accepts type STRINGType: Function
Returns: None
Restricted to: client, backend
VOID query_keep_regex(STRING regex)
Set keep to TRUE for all queries with a name matching regex.
This initiates keep_mode.
Arguments:
regex accepts type STRINGType: Function
Returns: None
Restricted to: client, backend
INT query_count()
Return the number of query pairs stored. If keep_mode is enabled, only
kept query pairs will be counted.
Arguments: None
Type: Function
Returns: Int
Restricted to: client, backend
STRING query_as_string(BOOL sort_query = 1, ENUM {NONE, KEY, KEY_VALUE} query_unique = NONE, BOOL query_keep_equal_sign = 0)
Return a string of queries in the format name=value&name2. sort_query
indicates the query string should be sorted. sort_query defaults to TRUE.
query_unique indicates if the query string should be unique by either key
or key and value. This is done before sorting. The first occurrence is kept
and each proceeding occurrence is removed. Defaults to NONE. If keep_mode
is enabled, only kept query pairs will be added to string. query_keep_equal_sign indicates that a
trailing equal sign should be kept when the query string value is empty.
Arguments:
sort_query accepts type BOOL with a default value of 1 optional
query_keep_equal_sign accepts type BOOL with a default value of 0 optional
query_unique is an ENUM that accepts values of NONE, KEY, and KEY_VALUE with a default value of NONE optional
Type: Function
Returns: String
Restricted to: client, backend
VOID query_set(STRING name, STRING value = "", BOOL keep = 1, BOOL all = 0)
Updates the value of the query ’name’ with the value ‘value’. If the query does not exist a new one with the provided name and value is added. Requesting all will result in the value of all matching queries being updated.
Arguments:
name accepts type STRING
value accepts type STRING with a default value of empty. optional
keep accepts type BOOL with a default value of 1 optional
all accepts type BOOL with a default value of 0 optional
Type: Function
Returns: None
Restricted to: client, backend
STRING url_get(INT start_range = 0, INT end_range = -1, ENUM {FROM_INPUT, TRUE, FALSE} leading_slash = FROM_INPUT, ENUM {FROM_INPUT, TRUE, FALSE} trailing_slash = FROM_INPUT)
Return the URL as a string. This can be done by range. By default the
start_range and end_range are set to 0 and -1. This is considered
the entire URL. The range is 0 based. leading_slash has three states.
When set to TRUE, a leading slash will be added to the URL. When set to
FALSE, no leading slash will be added to the URL. When set to FROM_INPUT
a leading slash will be added or not depending on the way the original
string was parsed. trailing_slash follows the same rules except the slash
will be at the end of the URL.
Arguments:
start_range accepts type INT with a default value of 0 optional
end_range accepts type INT with a default value of empty. optional
leading_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
trailing_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
Type: Function
Returns: String
Restricted to: client, backend
VOID url_add(STRING name, BOOL keep = 1, INT position = -1)
Add a URL segment with parameter keep. position is a base 0 integer.
By default, position = -1 which will add the URL segment to the end.
Adding to position = 0 will add to the front of the list. Adding to
position = 1 will add to the second spot and so on.
Arguments:
name accepts type STRING
keep accepts type BOOL with a default value of 1 optional
position accepts type INT with a default value of empty. optional
Type: Function
Returns: None
Restricted to: client, backend
VOID url_delete(STRING name, BOOL delete_keep = 0)
Delete all URL segments of name. If delete_keep is set kept URL segments
will also be removed. delete_keep is 0 by default.
Arguments:
name accepts type STRING
delete_keep accepts type BOOL with a default value of 0 optional
Type: Function
Returns: None
Restricted to: client, backend
VOID url_delete_range(INT start_range, INT end_range, BOOL delete_keep = 0)
Delete all URL segments between the given start_range and end_range indices.
start_range and end_range are base 0 and inclusive. If delete_keep is set
values of within range with keep set, will also be removed. delete_keep
is 0 by default. If end = -1 it will be set to the number of URL segments.
Arguments:
start_range accepts type INT
end_range accepts type INT
delete_keep accepts type BOOL with a default value of 0 optional
Type: Function
Returns: None
Restricted to: client, backend
VOID url_delete_regex(STRING regex, BOOL delete_keep = 0)
Delete all URL segments matching regex. If delete_keep kept URL segments
will also be removed. delete_keep is 0 by default.
Arguments:
regex accepts type STRING
delete_keep accepts type BOOL with a default value of 0 optional
Type: Function
Returns: None
Restricted to: client, backend
VOID url_keep(STRING name)
Set keep to TRUE for all URL segments of name. This initiates keep_mode.
Arguments:
name accepts type STRINGType: Function
Returns: None
Restricted to: client, backend
VOID url_keep_regex(STRING regex)
Set keep to TRUE for all URL segments with name matching regex.
This initiates keep_mode.
Arguments:
regex accepts type STRINGType: Function
Returns: None
Restricted to: client, backend
INT url_count()
Return the number of URL segments stored. If keep_mode is enabled, only
kept URL segments will be counted.
Arguments: None
Type: Function
Returns: Int
Restricted to: client, backend
STRING url_as_string(ENUM {FROM_INPUT, TRUE, FALSE} leading_slash = FROM_INPUT, ENUM {FROM_INPUT, TRUE, FALSE} trailing_slash = FROM_INPUT)
Return the URL formatted as, some/test/url. If keep_mode is enabled,
only kept URL segments will be added to string. leading_slash has three
states. When set to TRUE, a leading slash will be added to the URL.
When set to FALSE, no leading slash will be added to the URL. When set to
FROM_INPUT a leading slash will be added or not depending on the way the
original string was parsed.trailing_slash follows the same rules except
the slash will be at the end of the URL.
Arguments:
leading_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
trailing_slash is an ENUM that accepts values of FROM_INPUT, TRUE, and FALSE with a default value of FROM_INPUT optional
Type: Function
Returns: String
Restricted to: client, backend
The urlplus VMOD is available in Varnish Enterprise version 6.0.0r1 and later.