github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite
No package summary is available.
Package
Files: 2. Third party imports: 1. Imports from organisation: 0. Tests: 0. Benchmarks: 0.
Vars
Interface guard
Types
Rewrite
Rewrite is a middleware which can rewrite/mutate HTTP requests.
The Method and URI properties are "setters" (the request URI will be overwritten with the given values). Other properties are "modifiers" (they modify existing values in a differentiable way). It is atypical to combine the use of setters and modifiers in a single rewrite.
To ensure consistent behavior, prefix and suffix stripping is performed in the URL-decoded (unescaped, normalized) space by default except for the specific bytes where an escape sequence is used in the prefix or suffix pattern.
For all modifiers, paths are cleaned before being modified so that multiple, consecutive slashes are collapsed into a single slash, and dot elements are resolved and removed. In the special case of a prefix, suffix, or substring containing "//" (repeated slashes), slashes will not be merged while cleaning the path so that the rewrite can be interpreted literally.
Field name | Field type | Comment |
---|---|---|
Method |
|
Changes the request's HTTP verb. |
URI |
|
Changes the request's URI, which consists of path and query string. Only components of the URI that are specified will be changed. For example, a value of "/foo.html" or "foo.html" will only change the path and will preserve any existing query string. Similarly, a value of "?a=b" will only change the query string and will not affect the path. Both can also be changed: "/foo?a=b" - this sets both the path and query string at the same time. You can also use placeholders. For example, to preserve the existing query string, you might use: "?{http.request.uri.query}&a=b". Any key-value pairs you add to the query string will not overwrite existing values (individual pairs are append-only). To clear the query string, explicitly set an empty one: "?" |
StripPathPrefix |
|
Strips the given prefix from the beginning of the URI path.
The prefix should be written in normalized (unescaped) form,
but if an escaping ( |
StripPathSuffix |
|
Strips the given suffix from the end of the URI path.
The suffix should be written in normalized (unescaped) form,
but if an escaping ( |
URISubstring |
|
Performs substring replacements on the URI. |
PathRegexp |
|
Performs regular expression replacements on the URI path. |
Query |
|
Mutates the query string of the URI. |
logger |
|
No comment on field. |
queryOps
queryOps describes the operations to perform on query keys: add, set, rename and delete.
Field name | Field type | Comment |
---|---|---|
Rename |
|
Renames a query key from Key to Val, without affecting the value. |
Set |
|
Sets query parameters; overwrites a query key with the given value. |
Add |
|
Adds query parameters; does not overwrite an existing query field, and only appends an additional value for that key if any already exist. |
Replace |
|
Replaces query parameters. |
Delete |
|
Deletes a given query key by name. |
queryOpsArguments
This type doesn't have documentation.
Field name | Field type | Comment |
---|---|---|
Key |
|
A key in the query string. Note that query string keys may appear multiple times. |
Val |
|
The value for the given operation; for add and set, this is simply the value of the query, and for rename this is the query key to rename to. |
queryOpsReplacement
This type doesn't have documentation.
Field name | Field type | Comment |
---|---|---|
Key |
|
The key to replace in the query string. |
Search |
|
The substring to search for. |
SearchRegexp |
|
The regular expression to search with. |
Replace |
|
The string with which to replace matches. |
re |
|
No comment on field. |
regexReplacer
regexReplacer describes a replacement using a regular expression.
Field name | Field type | Comment |
---|---|---|
Find |
|
The regular expression to find. |
Replace |
|
The substring to replace with. Supports placeholders and regular expression capture groups. |
re |
|
No comment on field. |
substrReplacer
substrReplacer describes either a simple and fast substring replacement.
Field name | Field type | Comment |
---|---|---|
Find |
|
A substring to find. Supports placeholders. |
Replace |
|
The substring to replace with. Supports placeholders. |
Limit |
|
Maximum number of replacements per string. Set to <= 0 for no limit (default). |
Functions
func (*Rewrite) Provision
Provision sets up rewr.
Uses: fmt.Errorf, regexp.Compile.func (*queryOpsReplacement) Provision
Provision compiles the query replace operation regex.
Uses: fmt.Errorf, regexp.Compile.func (Rewrite) CaddyModule
CaddyModule returns the Caddy module information.
func (Rewrite) Rewrite
rewrite performs the rewrites on r using repl, which should have been obtained from r, but is passed in for efficiency. It returns true if any changes were made to r.
Uses: caddyhttp.CleanPath, strings.Contains, strings.Cut, strings.HasPrefix, strings.ReplaceAll, strings.ToUpper, url.PathUnescape.func (Rewrite) ServeHTTP
Private functions
func applyQueryOps
func buildQueryString
buildQueryString takes an input query string and performs replacements on each component, returning the resulting query string. This function appends duplicate keys rather than replaces.
References: fmt.Sprintf, fmt.Stringer, strconv.Itoa, strings.Builder, strings.Index, url.QueryEscape.func changePath
func init
func parseCaddyfileHandlePath
parseCaddyfileHandlePath parses the handle_path directive. Syntax:
handle_path [<matcher>] {
<directives...>
}
Only path matchers (with a /
prefix) are supported as this is a shortcut
for the handle directive with a strip_prefix rewrite.
func parseCaddyfileMethod
parseCaddyfileMethod sets up a basic method rewrite handler from Caddyfile tokens. Syntax:
method [<matcher>] <method>
func parseCaddyfileRewrite
parseCaddyfileRewrite sets up a basic rewrite handler from Caddyfile tokens. Syntax:
rewrite [<matcher>] <to>
Only URI components which are given in <to> will be set in the resulting URI. See the docs for the rewrite handler for more information.
func parseCaddyfileURI
parseCaddyfileURI sets up a handler for manipulating (but not "rewriting") the URI from Caddyfile tokens. Syntax:
uri [<matcher>] strip_prefix|strip_suffix|replace|path_regexp <target> [<replacement> [<limit>]]
If strip_prefix or strip_suffix are used, then <target> will be stripped only if it is the beginning or the end, respectively, of the URI path. If replace is used, then <target> will be replaced with <replacement> across the whole URI, up to <limit> times (or unlimited if unspecified). If path_regexp is used, then regular expression replacements will be performed on the path portion of the URI (and a limit cannot be set).
References: strconv.Atoi.func reverse
func trimPathPrefix
trimPathPrefix is like strings.TrimPrefix, but customized for advanced URI path prefix matching. The string prefix will be trimmed from the beginning of escapedPath if escapedPath starts with prefix. Rather than a naive 1:1 comparison of each byte to determine if escapedPath starts with prefix, both strings are iterated in lock-step, and if prefix has a '%' encoding at a particular position, escapedPath must also have the same encoding representation for that character. In other words, if the prefix string uses the escaped form for a character, escapedPath must literally use the same escape at that position. Otherwise, all character comparisons are performed in normalized/unescaped space.
References: strings.EqualFold, url.PathUnescape.func do
func do
func do
do performs the substring replacement on r.
References: caddyhttp.CleanPath, strings.Contains, strings.Replace.Tests
Files: 1. Third party imports: 0. Imports from organisation: 0. Tests: 1. Benchmarks: 0.