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

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

以下重写工作正常:

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

但这不起作用

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

我究竟做错了什么?

低于整个 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;

             }
}

答案1

首先,将密钥重写从location块中移出并放入封闭server块中。这将简化您的逻辑。

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

最后,如果仍然找不到根本原因启用常规调试日志记录对于 Nginx:

error_log /path/to/log debug;

相关内容