У меня есть 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, что я делаю не так?
Строка запроса не является частью нормализованный 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
. Подробнее см. этот документ.
на данный момент он не работает со второй локации и выдает ошибку 404 и проблема в том, что на моем фронтенде у меня есть маршрут с inventory/:id , но без вопросительного знака и строки ID, будет ли работать маршрут правильно?