Commit bb85a845 authored by Mathias Beke's avatar Mathias Beke

Merge remote-tracking branch 'upstream/master'

Conflicts:
	middleware/fastcgi/fastcgi.go
parents 8baead61 be6fc353
...@@ -167,9 +167,17 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string] ...@@ -167,9 +167,17 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string]
} }
// Strip PATH_INFO from SCRIPT_NAME // Strip PATH_INFO from SCRIPT_NAME
indexPathInfo := strings.LastIndex(scriptName, pathInfo) scriptName = strings.TrimSuffix(scriptName, pathInfo)
if indexPathInfo != -1 {
scriptName = scriptName[:indexPathInfo] // 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
...@@ -198,7 +206,7 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string] ...@@ -198,7 +206,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,
} }
......
...@@ -381,9 +381,9 @@ func (c *FCGIClient) Request(p map[string]string, req io.Reader) (resp *http.Res ...@@ -381,9 +381,9 @@ func (c *FCGIClient) Request(p map[string]string, req io.Reader) (resp *http.Res
return return
} }
if len(statusParts) > 1 { if len(statusParts) > 1 {
resp.Status = statusParts[1] resp.Status = statusParts[1]
} }
} else { } else {
resp.StatusCode = http.StatusOK resp.StatusCode = http.StatusOK
} }
......
...@@ -49,6 +49,9 @@ func NewSimpleRule(from, to string) SimpleRule { ...@@ -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 { ...@@ -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 != "" {
......
...@@ -14,7 +14,7 @@ import ( ...@@ -14,7 +14,7 @@ import (
"os" "os"
"os/signal" "os/signal"
"github.com/bradfitz/http2" "golang.org/x/net/http2"
) )
// Server represents an instance of a server, which serves // Server represents an instance of a server, which serves
......
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