Redirect 内部重定向时的Nginx重写或内部重定向周期

Redirect 内部重定向时的Nginx重写或内部重定向周期,redirect,nginx,Redirect,Nginx,我和nginx有麻烦 这是我的配置 server { listen 80; listen [::]:80; server_name www.test.local; return 301 http://test.local$request_uri; } server { server_name test.loc

我和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;
    }
}
我希望我的位置作为/usr/share/nginx/test/htdocs/styles/的链接,就像我在配置中那样

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;
    }
}
但当我输入时,例如,我收到下一个错误:

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\u files
指令中添加有效的默认操作,例如404响应:

try_files $uri $uri/ =404;
那么,回到第一个问题。您的配置声明
/css/example.css
位于
/usr/share/nginx/test/htdocs/web/css/css/example.css
。请注意,
/css/
是复制的。这同样适用于
/images/
/js/
/font/
。有关
root
指令的详细信息,请参阅

在大多数配置中,在
服务器
块级别指定
,并允许几乎所有
位置
块继承它就足够了,而不是在每个位置重复它

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

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