Mám nainštalovaný nginx 1.0.2 na Ubuntu 11 s php 5.3.5 bežiacim s FPM / FastCGI.
Na moju aplikáciu codeigniter dostanemnasledujúci problém. Mám jednoduchý prihlasovací formulár s poľom užívateľské meno a heslo. Po odoslaní formulára je pole $ _POST prázdne. Rovnako aj $ this-> input-> post („používateľské meno“) a $ this-> input-> post („heslo“).
Aplikácia funguje dobre na apache. Pokúsil som sa vytvoriť jednoduchý testovací formulár na jednoduchom súbore php a údaje $ _POST fungovali perfektne. V prípade potreby môžem poskytnúť konfiguračné súbory. Nejaké nápady ?
aktualizovať: Nakoniec sa to podarilo. V mojej konfigurácii vhost boli nejaké presmerovania, ktoré spôsobovali stratu dát po odoslaní. Fungujúcu konfiguráciu vhost nájdete tu: http://codeigniter.com/forums/viewthread/90231/#455528
odpovede:
1 pre odpoveď č. 1Myslím, že problém teraz poznám.Skutočnosť, že sa vracia kód 404 a spracováva váš skript, mi hovorí, že stránka error_page robí chybu „prepis“, aby získala požiadavku na /index.php. Stránka error_page do nepomenovaného umiestnenia transformuje požiadavku na GET, takže error_page 404 /index.php robí interné presmerovanie na /index.php, ale v procese (a nedostatku) zbavuje telo žiadosti z = znamená, že stavový kód nie je prepísaný cieľovou stránkou error_page). Nie som si istý, prečo presmerovanie nevykonávajú všetci (ak je spracovanie v nginxe naozaj čudné, takže je dobré sa im vyhnúť), ale myslím si, že ak pre svoju chybovú stránku používate pomenované umiestnenie, zachová telo žiadosti a vyplní $ _POST. Skúste nahradiť svoju aktuálnu smernicu error_page:
location @redir {
rewrite ^ /index.php;
}
error_page 404 = @redir;
0 pre odpoveď č. 2
skontrolujte tieto:
<form method="post">
pouzivas postovu metodu?
skúste spustiť profiler:
$this->output->enable_profiler(TRUE);
vidíš tam nejaký výstup POST?
0 pre odpoveď č. 3
Používal som svoj vlastný rámec PHP s podobným URIprepisuje ako CI a na serveri Nginx mali podobné problémy, pretože moje formuláre mali akcie ako: action = "admin / login / post" a musel som ich zmeniť tak, aby končili na .php action = "admin / login / post.php" takže mohli fungovať, ale vyžaduje to, aby ste zmenili prepis URI svojej triedy CI a nahradili tak tento .php z reťazca uri.
0 pre odpoveď č. 4
Mal som podobný problém a vyskúšal som všetko, čo je tu uvedené. Bolo to veľmi jednoduché, keď som na to prišiel, nepomenoval som svoje vstupné premenné vo formulári. Parameter mena mi chýbal.
<input type="name" placeholder="Name" name="name">