url重写,nginx抛出404错误,错误日志中没有任何内容

Ola*_*ger 5 mod-rewrite rewrite nginx regex http-status-code-404

下面的重写工作正常:

rewrite ^/city/restaurants$ /city/listings/restaurants permanent;
Run Code Online (Sandbox Code Playgroud)

但这不起作用

rewrite ^/city/restaurants$ /city/listings/restaurants last;
rewrite ^/city/restaurants$ /city/listings/restaurants break;
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

位于整个 nginx 服务器块下方

  server {
          listen 80 default backlog=1024;
          server_name mydomain.com;


          client_max_body_size 20M;
          charset utf-8;
          keepalive_timeout 50;

          access_log /var/log/access_log main;
          error_log /var/log/error_log info;


          root /var/www/;
          index index.php index.phtml index.html;
  autoindex on;

   location ~ \..*/*\.php$ {
       return 403;
   }
   location ~^/sites/.*/private/{
       return 403;
   }
   location ~^/sites/.*/files/* {
       try_files $uri @rewrite;
   }
   location ~ (^|/)\. {
       return 403;
   }

   location / {

rewrite ^/city/restaurants$ /city/listings/restaurants last;

    location ~* \.php$ {
                            include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                            #fastcgi_pass unix:/var/run/php5-fpm.sock;
                            fastcgi_pass 127.0.0.1:9000;
                            #try_files $uri @rewrite;
                            }
                    try_files $uri @rewrite;
                    }

            location @rewrite {
                    rewrite ^ /index.php;
            }
            location ~* \.(?:ico|css|js|gif|jpg|jpeg|png)$
            {
                    try_files $uri $uri/;
                    expires 30d;

             }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*erg 2

首先,将密钥重写从location块移到封闭server块中。这会简化你的逻辑。

接下来,启用重写调试日志记录以确认您收到的 404 是来自原始 URL 还是重写的 URL。

最后,如果仍未找到根本原因,请启用Nginx 的常规调试日志记录:

error_log /path/to/log debug;
Run Code Online (Sandbox Code Playgroud)