redirect之内部重定向时 Nginx 重写或内部重定向循环

jpfss 阅读:27 2025-01-19 22:14:33 评论:0

我在使用 nginx 时遇到了问题。

这是我的配置。

server { 
    listen                  80; 
    listen                  [::]:80; 
    server_name             www.test.local; 
    return                  301 http://test.local$request_uri; 
} 
server { 
    server_name             test.local; 
    root                    /usr/share/nginx/test/htdocs/web; 
 
    # error_log               /var/log/nginx/test.error.log; 
    # access_log              /var/log/nginx/test.access.log; 
 
    rewrite                 ^/app\.php/?(.*)$ /$1 permanent; 
 
    location / { 
        index app.php; 
        try_files           $uri @rewriteapp; 
    } 
 
    location @rewriteapp { 
        rewrite ^(.*)$      /app.php/$1 last; 
    } 
 
    location ~ ^/app\.php(/|$) { 
        fastcgi_pass        172.17.0.1:48000; 
        fastcgi_split_path_info ^(.+\.php)(/.*)$; 
 
        include             fastcgi_params; 
        fastcgi_param       SCRIPT_FILENAME  $realpath_root$fastcgi_script_name; 
        fastcgi_param       DOCUMENT_ROOT $realpath_root; 
        internal; 
    } 
 
    location /uploads/ { 
        root                /usr/share/nginx/test/htdocs/web/uploads; 
        try_files           $uri $uri/; 
        access_log          off; 
        expires             30d; 
    } 
 
    location /images/ { 
        root                /usr/share/nginx/test/htdocs/web/images; 
        try_files           $uri $uri/; 
        access_log          off; 
        expires             30d; 
    } 
 
    location /css/ { 
        root                /usr/share/nginx/test/htdocs/web/css; 
        try_files           $uri $uri/; 
        access_log          off; 
        expires             30d; 
    } 
 
    location /js/ { 
        root                /usr/share/nginx/test/htdocs/web/js; 
        try_files           $uri $uri/; 
        access_log          off; 
        expires             30d; 
    } 
 
    location /fonts/ { 
        root                /usr/share/nginx/test/htdocs/web/fonts; 
        try_files           $uri $uri/; 
        access_log          off; 
        expires             30d; 
    } 
 
    location = /favicon.ico { 
        return              204; 
        access_log          off; 
        log_not_found       off; 
    } 
} 

我希望我的位置为 http://test.local/css/链接到/usr/share/nginx/test/htdocs/styles/就像我在我的配置中所做的那样。

但是当我输入例如 http://test.local/css/flow.css 时我收到下一个错误:

2016/05/13 15:55:30 [error] 5#5: *64 rewrite or internal redirection cycle while internally redirecting to "/css/flow.css///////////", client: 192.168.99.1, server: test.local, request: "GET /css/flow.css HTTP/1.1", host: "test.local", referrer: "http://test.local/" 

这里有什么问题?

请您参考如下方法:

您的配置有两个问题。

第一个问题是你的root指令错误,所以找不到文件。

第二个问题是默认操作是在 URI 的末尾添加另一个 /

您需要向您的 try_files 指令添加一个有效的默认操作,例如 404 响应:

try_files $uri $uri/ =404; 

那么,回到第一个问题。您的配置表明 /css/example.css 位于 /usr/share/nginx/test/htdocs/web/css/css/example.css。请注意,/css/ 已被复制。 /images//js//fonts/ 也是如此。参见 this document root 指令的详细信息。

在大多数配置中,在 server block 级别指定 root 并允许它被几乎所有 location 继承就足够了 block ,而不是在每个位置重复它。

您的问题指出 /css/ 文件应该在 /usr/share/nginx/test/htdocs/styles/ 中找到。这需要一个 alias 指令。参见 this document有关 alias 指令的详细信息。例如:

location /css/ { 
    alias       /usr/share/nginx/test/htdocs/styles/; 
    access_log  off; 
    expires     30d; 
} 


标签:nginx
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号