首页 > 解决方案 > 当有一个带问号的 URL 并且等于 react nginx 时运行另一个应用程序

问题描述

我有 2 个反应构建应用程序,我只想在 URL 与 www.example.com/inventory/?id=... 我的配置 nginx 一致时运行其中一个

server {
listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}

server {
listen 443 ssl default_server;

index index.html;

ssl on;
ssl_certificate /etc/ssl/example.com.crt;
ssl_certificate_key /etc/ssl/example.com.key;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    root /var/www/example.com/;

location / {
    root /var/www/example.com/public/admin;     
    try_files $uri $uri/ =404;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fmp.sock;
    }
}

    location /inventory/?id= {
    root /var/www/example.com/public/inventory;     
    try_files $uri $uri/ =404;
}

我收到 404 nginx 错误,我做错了什么?

标签: reactjsnginxnginx-location

解决方案


查询字符串不是用于匹配or语句的规范化 URI的一部分。locationrewrite

您的位置块可以匹配所有以开头的 URI,/inventory/但您需要使用if块来拒绝没有匹配参数的任何请求。请参阅此使用注意事项if

例如:

location /inventory/ {
    if ($arg_id = "") { return 404; }

    root /var/www/example.com/public;
    try_files $uri $uri/ =404;
}

请注意,文件的路径是通过将root指令的值与 URI 连接形成的,因此除非您的意思是inventory在路径中包含两个目录,否则它也不应该出现在root语句中。有关详细信息,请参阅此文档


推荐阅读