запустить другое приложение, когда есть URL с вопросительным знаком и равным реагировать nginx - PullRequest
1 голос
/ 19 июня 2019

У меня есть 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;
}

Iполучить ошибку 404 nginx, что я делаю не так?

1 Ответ

1 голос
/ 19 июня 2019

Строка запроса не является частью нормализованного URI , используемого для сопоставления с оператором location или rewrite.

Ваш блок местоположения может соответствовать всем 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 заявление также. Подробнее см. в этом документе .

...