mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-20 22:52:58 -05:00
fastcgi: Fix REQUEST_URI if rewrite directive changes URL
This commit is contained in:
parent
ca1f1362cc
commit
be6fc35326
2 changed files with 19 additions and 1 deletions
|
@ -166,6 +166,17 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string]
|
||||||
scriptFilename = absPath
|
scriptFilename = absPath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the request URI. The request URI might be as it came in over the wire,
|
||||||
|
// or it might have been rewritten internally by the rewrite middleware (see issue #256).
|
||||||
|
// If it was rewritten, there will be a header indicating the original URL,
|
||||||
|
// which is needed to get the correct RequestURI value for PHP apps.
|
||||||
|
const internalRewriteFieldName = "Caddy-Rewrite-Original-URI"
|
||||||
|
reqURI := r.URL.RequestURI()
|
||||||
|
if origURI := r.Header.Get(internalRewriteFieldName); origURI != "" {
|
||||||
|
reqURI = origURI
|
||||||
|
r.Header.Del(internalRewriteFieldName)
|
||||||
|
}
|
||||||
|
|
||||||
// Some variables are unused but cleared explicitly to prevent
|
// Some variables are unused but cleared explicitly to prevent
|
||||||
// the parent environment from interfering.
|
// the parent environment from interfering.
|
||||||
env = map[string]string{
|
env = map[string]string{
|
||||||
|
@ -192,7 +203,7 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string]
|
||||||
"DOCUMENT_ROOT": h.AbsRoot,
|
"DOCUMENT_ROOT": h.AbsRoot,
|
||||||
"DOCUMENT_URI": docURI,
|
"DOCUMENT_URI": docURI,
|
||||||
"HTTP_HOST": r.Host, // added here, since not always part of headers
|
"HTTP_HOST": r.Host, // added here, since not always part of headers
|
||||||
"REQUEST_URI": r.URL.RequestURI(),
|
"REQUEST_URI": reqURI,
|
||||||
"SCRIPT_FILENAME": scriptFilename,
|
"SCRIPT_FILENAME": scriptFilename,
|
||||||
"SCRIPT_NAME": scriptName,
|
"SCRIPT_NAME": scriptName,
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,9 @@ func NewSimpleRule(from, to string) SimpleRule {
|
||||||
// Rewrite rewrites the internal location of the current request.
|
// Rewrite rewrites the internal location of the current request.
|
||||||
func (s SimpleRule) Rewrite(r *http.Request) bool {
|
func (s SimpleRule) Rewrite(r *http.Request) bool {
|
||||||
if s.From == r.URL.Path {
|
if s.From == r.URL.Path {
|
||||||
|
// take note of this rewrite for internal use by fastcgi
|
||||||
|
// all we need is the URI, not full URL
|
||||||
|
r.Header.Set("Caddy-Rewrite-Original-URI", r.URL.RequestURI())
|
||||||
r.URL.Path = s.To
|
r.URL.Path = s.To
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -129,6 +132,10 @@ func (r *RegexpRule) Rewrite(req *http.Request) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// take note of this rewrite for internal use by fastcgi
|
||||||
|
// all we need is the URI, not full URL
|
||||||
|
req.Header.Set("Caddy-Rewrite-Original-URI", req.URL.RequestURI())
|
||||||
|
|
||||||
// perform rewrite
|
// perform rewrite
|
||||||
req.URL.Path = url.Path
|
req.URL.Path = url.Path
|
||||||
if url.RawQuery != "" {
|
if url.RawQuery != "" {
|
||||||
|
|
Loading…
Add table
Reference in a new issue