ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: все таки как вылечить 405 ошибку :(



Michail Baikov wrote:
> Anton Ladokha wrote:
>> поможет:
>> 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 в статике
>> не будет. Или его придётся дублировать пустыми файлами.
>>
>>
>>
> я сделал:
> 
>         location /service/ {
>             rewrite  /service/  /service/index.php  last;
>         }
> 
> #        location / {
> #            root                /var/www/xxxxxxxx.ru/htdocs;
> #            index               index.php index.html index.htm;
> #        }
> 
> 
> 
> 
Могли быть проблемы с отправкой писем у меня в рассылку - кратко повторю
вопросы.



Проблема немного уточнилась.

Возможно ли сделать так с помощью конфигурации, что если клиент посылает
форму методом POST с использованием в ACTION дополнительных параметров?

Понимаю что смешение post и get теперь запрещено, но можно каким-то
способом модифицировать эти запросы, чтобы они были либо полностью post,
 либо полностью get? Изменять клиента не предоставляется возможным в
моем случае.

Заметил еще одну странность. При "неправильном" редиректе

       location = /service/ {
            rewrite             \?list$  /service/list.php last;
        }

В логе вижу следующее:

2006/06/21 12:48:01 [error] 24984#0: *1 "/usr/html/service/index.html"
is not found (2: No such file or directory)
2006/06/21 12:48:02 [error] 24984#0: *1 "/usr/html/service/index.html"
is not found (2: No such file or directory)

что за /usr/html???????? понимаю что опущен root ...., но как-то
неправильно делать /usr/html =)

чень странно -

rewrite /service/\?list  /service/test.html break;

не работает

rewrite /service/list  /service/test.html break;

работает.

Запросы подаю и /list и /?list - работает при любой из этих конфигураций
- одинаково.



В итоге - что за проблема в обработке знака вопроса?





-- 
Mike Baikov <mike at baikov dot com>
GameDot Labs Developer





 




Copyright © Lexa Software, 1996-2009.