Nginx路由问题

时间:2019-02-20 18:47:28

标签: nginx

不确定如何问这个问题,但我也浏览了整个网络,却找不到答案,因此非常感谢您的帮助。

我正在尝试通过使用nginx的网站来设置API调用,如果我发送url / api / timestamp /,它就可以正常工作并返回预期的结果。但是,如果我添加一个参数并发送/ api / timestamp / 2015-08-09,它将尝试打开文件2015-08-09,该文件显然不存在。

如何让Nginx将参数作为参数传递给程序,而不尝试将其用作路由?还是我看错了?

server {
    listen          83 default_server;
    server_name     portfolio.com;

    access_log      /var/log/nginx/port.access.log;
    error_log       /var/log/nginx/port.error.log;
    root            /var/www/portfolio/;
    index           index.php;

    error_page 404    /404.html;
    error_page 405    =200 $uri;

    location /api/timestamp/ {

            rewrite         /api/timestamp/(.*) /api/timestamp/?param=$1 last;
    }

    location ~ \.php$ {
            try_files       $uri $uri/  =404;
            fastcgi_pass    unix:/run/php/php7.2-fpm.sock;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include         /etc/nginx/fastcgi.conf;
    }

}

1 个答案:

答案 0 :(得分:1)

您需要使用重写规则,最简单的解决方案是这样的

location /api/timestamp/ {
    rewrite /api/timestamp/(.*) /api/timestamp/?param=$1 last;
}

然后,您将在名为 param 的参数中接收值(根据您的要求进行更改)。

很显然,您可以使用限制性最强的正则表达式来避免出现不希望的值。

您可以在https://www.nginx.com/blog/creating-nginx-rewrite-rules/中获得更多信息。

致谢。