Рейтинг:0

Как избежать перенаправления nginx POST на GET

флаг mu

Я вижу это в своем журнале

"POST /openDoor HTTP/1.1" 301 169 "-" "PostmanRuntime/7.29.0"

"GET /openDoor/ HTTP/1.1" 200 113 "https:///openDoor" "PostmanRuntime/7.29.0"

Я делаю POST для /openDoor и получаю 301. почему?

Мой файл конфигурации nginx таков

сервер {

    client_body_buffer_size 30M;
    client_max_body_size 30M;


    расположение ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        включить fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;

        proxy_buffer_size 1024 КБ;
        proxy_buffers 32 2048k;
        proxy_busy_buffers_size 2048k;
    }


    место расположения / {
        индекс index.php;
        try_files $uri $uri/ /index.php?q=$uri&$args =404;
    }


    error_log /var/log/nginx/error.log предупреждение;
    access_log /var/log/nginx/access.log объединенный;

    имя_сервера <отредактировано>;

    корень /var/www/проект;


    слушать 443 ssl; # под управлением Certbot
    ssl_certificate /etc/letsencrypt/live/<удалено>/fullchain.pem; # под управлением Certbot
    ssl_certificate_key /etc/letsencrypt/live/<удалено>/privkey.pem; # под управлением Certbot
    включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot

}

Как избежать этого странного перенаправления?

Я пробовал это, без каких-либо результатов

местоположение /openDoor {
  add_header Cache-Control без кеша;
  истекает -1;
  add_header Cache-Control без хранения;
  try_files /openDoor/index.php = 404;
}


местоположение /openDoor/ {
  add_header Cache-Control без кеша;
  истекает -1;
  add_header Cache-Control без хранения;
  try_files /openDoor/index.php = 404;
}
Ivan Shatsky avatar
флаг gr
Замените `try_files $uri $uri/ /index.php?q=$uri&$args =404;` на `try_files $uri $uri/ /index.php?q=$uri&$args;`
realtebo avatar
флаг mu
ничего не меняется
Ivan Shatsky avatar
флаг gr
Что это за префикс `/openDoor`? Это маршрут, который должен обрабатываться центральным контроллером `root /var/www/project/index.php`, или это каталог, в котором находится какое-то дополнительное веб-приложение?
realtebo avatar
флаг mu
/openDoor — это физический каталог
Рейтинг:0
флаг gr

С открытая дверь это физический каталог, это делает nginx 301 /открытая дверь к /открытая дверь/ перенаправление и с перенаправлением HTTP 301 пользовательский браузер изменит метод запроса с ПУБЛИКОВАТЬ к ПОЛУЧАТЬ отказ от тела запроса. можно попробовать указать Перенаправление HTTP 308 явно с

местоположение = / openDoor {
    вернуть 308 $request_uri;
}

Хотя это не имеет прямого отношения к вашему вопросу, вы должны заменить

try_files $uri $uri/ /index.php?q=$uri&$args =404;

в соответствии с

try_files $uri $uri/ /index.php?q=$uri&$args;

Причина в том, что try_files директива обработала файлы с место расположения контекст блока, и поскольку у вас нет обработчика FastCGI в этом месте, ваш index.php файл будет обслуживаться как обычный текст. С другой стороны, самый последний try_files параметр будет рассматриваться как новый URI и правильный местоположение ~ \.php$ { ... } будет выбран, чтобы служить ему.

realtebo avatar
флаг mu
Я не могу использовать перенаправление, потому что я вызываю его с помощью POST (клиент, не моя вина.. как обычно длинная грустная история), и таким образом я получил POST, перенаправленный как GET
Ivan Shatsky avatar
флаг gr
Вы имеете в виду, что вы изменили метод `POST` на `GET`, даже используя перенаправление `HTTP 308`?
realtebo avatar
флаг mu
Да, Иван, точно.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.