Как я могу сопоставить запросы для известных типов MIME, содержащих строки запроса, в nginx?

Я использую nginx для статического обслуживания ресурсов, а также перенаправления всех запросов, не связанных с активами, на фронт-контроллер PHP. у меня есть location блок, который выглядит как:

location / {
    include /etc/nginx/mime.types;
    index index.php;
    try_files $request_uri $request_uri/ /index.php?$query_string;
}

Из того, что я понимаю, это должно сначала попытаться сопоставить запрос с любыми известными типами MIME, и если файл не найден, он должен попробовать запрос против моего PHP location блок (не показан).

Это прекрасно работает, если я хочу посетить http://example.com/css/owls.css, но если я попытаюсь посетить http://example.com/css/owls.css?t=_423632636, он не распознает "расширение" и поэтому пытается передать запрос в мою точку входа PHP (что, конечно, не удается).

Как я могу сказать nginx, что запрос на http://example.com/css/owls.css?t=_423632636 (или любая другая строка запроса, которая следует за допустимым типом MIME) должна сначала попытаться соответствовать статическому файлу css/owls.css?

Если файл (без строки запроса) не существует, то он должен вернуться к PHP try_files команда.

1 ответ

Решение

Nginx делает это автоматически для меня с помощью строки try_files ниже. Обратите внимание, что вы используете $request_uri вместо $uri. Попробуйте изменить это. первый.

try_files $uri $uri/ /index.php?$args;

Если это не решит вашу проблему, отредактируйте ваш вопрос, включив в него весь файл nginx.conf и соответствующий блок сервера.

Другие вопросы по тегам