Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: все таки как вылечить 40 5 ошибку :(
поможет:
rewrite ^/\? /index.php\?;
(не силен я в регулярных, но по смыслу верно).
----- Original Message -----
From: "Michail Baikov" <lists@xxxxxxxxxx>
To: <nginx-ru@xxxxxxxxx>
Sent: Tuesday, June 20, 2006 4:18 PM
Subject: все таки как вылечить 405 ошибку :(
Игорь - здравствуйте!
Переписка старая ниже.
Проблема в том, что старый софт написан так, что посылает POST запрос к
скрипту используя URL с параметрами (www.host.com/?list)
Переделать программку нельзя, переделать урл можно, но сложно (клиент
далеко). Можно ли каким-то образом сделать специальную обработку этой
ситуации в конфиге nginx?
On Thu, 25 May 2006, Michail Baikov wrote:
Igor Sysoev wrote:
On Wed, 24 May 2006, Michail Baikov wrote:
Eugene wrote:
Именно.
Но опять же непонятно, почему нельзя использовать их одновременно?
Дело в том, что /index.pl?action=3 - это не GET-запрос, это URL.
Обычный URL, как его трактует веб-сервер - его дело. Таким образом
POST /index.pl?action=3 ничем не отличается от
POST /anotherurl и от
POST /,da,das,/?d/as???a=&aasdsa
Если считать GET запрос как /index.php?id=1&id1=2, то да - отключение
микса типов запроса правильно.
Но если GET запрос с точки зрения сервера - это дополнительное поле в
заголовке, то исключение микса POST с GETом, является, IMHO, небольшим
недоразумением в реализации nginx. Я сейчас не помню как оформляется
запросы GET и POST из формы в HTTP, поправьте.
nginx понимает и POST, и GET с телом запроса и с query string.
Проблема, насколько я понимаю, была в другом - делался POST
в статический /.
Делался POST в динамический index.php (это же скрипт fastcgi). Хотя что
называется статикой и динамикой в данном контексте, я не понял
Я повторяю в третий раз пример конфигурации,
location / {
index.php;
}
location ~ \.php$ {
fastcgi_pass ...
}
для которого версии старше 0.3.40 для POSTа выдают 405.
До 0.3.40 дело происходило так:
1) POST / в первом location превращается в внутренний редирект
POST /index.php, потому что на диске есть файл /index.php (если
файла не будет, то будет 404). Файл с точки зрения nginx - статический.
В версиях после 0.3.40 nginx выдаёт 405, потому что статика не умеет
обрабатывать POST.
2) В версиях после 0.3.40 внутренний редирект POST /index.php
обрабатывается во втором location и уходит на fastcgi_pass ?
Данный конфиг не будет работать во всех версиях, если статика и php
будут разнесены, например, на разные машины - index.php в статике
не будет. Или его придётся дублировать пустыми файлами.
--
Mike Baikov <mike at baikov dot com>
GameDot Labs Developer
|