Commit bbee9614 authored by Toby Allen's avatar Toby Allen Committed by Matt Holt

Introduce new Replacer fields {rewrite_path}, {rewrite_path_escaped}; issue #1185 (#1364)

* Fix #1185

* Return normal path if no rewrite has happened

* Revert change, not required

* Updated tests
parent 59e6ceb5
...@@ -223,8 +223,22 @@ func (r *replacer) getSubstitution(key string) string { ...@@ -223,8 +223,22 @@ func (r *replacer) getSubstitution(key string) string {
} }
return host return host
case "{path}": case "{path}":
return r.request.URL.Path // if a rewrite has happened, the original URI should be used as the path
// rather than the rewritten URI
path := r.request.Header.Get("Caddy-Rewrite-Original-URI")
if path == "" {
path = r.request.URL.Path
}
return path
case "{path_escaped}": case "{path_escaped}":
path := r.request.Header.Get("Caddy-Rewrite-Original-URI")
if path == "" {
path = r.request.URL.Path
}
return url.QueryEscape(path)
case "{rewrite_path}":
return r.request.URL.Path
case "{rewrite_path_escaped}":
return url.QueryEscape(r.request.URL.Path) return url.QueryEscape(r.request.URL.Path)
case "{query}": case "{query}":
return r.request.URL.RawQuery return r.request.URL.RawQuery
......
...@@ -24,7 +24,8 @@ func TestRewrite(t *testing.T) { ...@@ -24,7 +24,8 @@ func TestRewrite(t *testing.T) {
regexps := [][]string{ regexps := [][]string{
{"/reg/", ".*", "/to", ""}, {"/reg/", ".*", "/to", ""},
{"/r/", "[a-z]+", "/toaz", "!.html|"}, {"/r/", "[a-z]+", "/toaz", "!.html|"},
{"/url/", "a([a-z0-9]*)s([A-Z]{2})", "/to/{path}", ""}, {"/path/", "[a-z0-9]", "/to/{path}", ""},
{"/url/", "a([a-z0-9]*)s([A-Z]{2})", "/to/{rewrite_path}", ""},
{"/ab/", "ab", "/ab?{query}", ".txt|"}, {"/ab/", "ab", "/ab?{query}", ".txt|"},
{"/ab/", "ab", "/ab?type=html&{query}", ".html|"}, {"/ab/", "ab", "/ab?type=html&{query}", ".html|"},
{"/abc/", "ab", "/abc/{file}", ".html|"}, {"/abc/", "ab", "/abc/{file}", ".html|"},
...@@ -71,6 +72,8 @@ func TestRewrite(t *testing.T) { ...@@ -71,6 +72,8 @@ func TestRewrite(t *testing.T) {
{"/r/z", "/toaz"}, {"/r/z", "/toaz"},
{"/r/z.html", "/r/z.html"}, {"/r/z.html", "/r/z.html"},
{"/r/z.js", "/toaz"}, {"/r/z.js", "/toaz"},
{"/path/a1b2c", "/to/path/a1b2c"},
{"/path/d3e4f", "/to/path/d3e4f"},
{"/url/asAB", "/to/url/asAB"}, {"/url/asAB", "/to/url/asAB"},
{"/url/aBsAB", "/url/aBsAB"}, {"/url/aBsAB", "/url/aBsAB"},
{"/url/a00sAB", "/to/url/a00sAB"}, {"/url/a00sAB", "/to/url/a00sAB"},
......
...@@ -23,6 +23,7 @@ func TestTo(t *testing.T) { ...@@ -23,6 +23,7 @@ func TestTo(t *testing.T) {
{"/?a=b", "/testdir /index.php?{query}", "/index.php?a=b"}, {"/?a=b", "/testdir /index.php?{query}", "/index.php?a=b"},
{"/?a=b", "/testdir/ /index.php?{query}", "/testdir/?a=b"}, {"/?a=b", "/testdir/ /index.php?{query}", "/testdir/?a=b"},
{"/test?url=http://", " /p/{path}?{query}", "/p/test?url=http://"}, {"/test?url=http://", " /p/{path}?{query}", "/p/test?url=http://"},
{"/test?url=http://", " /p/{rewrite_path}?{query}", "/p/test?url=http://"},
{"/test/?url=http://", " /{uri}", "/test/?url=http://"}, {"/test/?url=http://", " /{uri}", "/test/?url=http://"},
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment