不确定如何问这个问题,但我也浏览了整个网络,却找不到答案,因此非常感谢您的帮助。
我正在尝试通过使用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;
}
}
答案 0 :(得分:1)
您需要使用重写规则,最简单的解决方案是这样的
location /api/timestamp/ {
rewrite /api/timestamp/(.*) /api/timestamp/?param=$1 last;
}
然后,您将在名为 param 的参数中接收值(根据您的要求进行更改)。
很显然,您可以使用限制性最强的正则表达式来避免出现不希望的值。
您可以在https://www.nginx.com/blog/creating-nginx-rewrite-rules/中获得更多信息。
致谢。