nginx - php vs Php

Sziasztok,

Talalkoztam egy érdekes problémával:

Azure-ben ubuntu + nginx + php-fpm alatt fut egy web app. Ha direktben futtatod a scriptet (..../index.php) akkor működik ahogy kell, azonban ha átírom a .php kiterjesztést .PHP-re vagy .Php-re akkor fogja és letölti az index.php file-t.

Ez elég gáz!

Találkoztatok már ilyennnel? Illetve mit es hogyan kellene beállítani, hogy a fenti ne történjen meg?

Helyreigazitas:

A fenti peldaban az URL-re gondoltam.
Tehat:

file neve: index.php
URL: https://valami.domain/index.php -> ez megy rendesen
URL: https://valami.domain/index.PHP -> ebben az esetben letoltodik az index.php file ahelyett hogy vegrehajtodna

A filerendszeren nincs "index.PHP" file!

Hozzászólások

pontosan hogy dobod át a php-fpm -nek a dolgokat? mert ha "~* \.php$"-vel, akkor az nem case sensitive. ha a csillagot elhagyod, akkor lesz case sensitive.

Nyilván látni kellene a configot, de gondolom van egy ilyen sorod valahol:

location ~ \.php(/|$) { 

A problémát itt a ~ okozza, ami kis és nagybetű különbséget figyelembe veszi.

Lásd a dokumentációt:
http://nginx.org/en/docs/http/ngx_http_core_module.html#location

TLDR: ~ helyett ~*, ami case insensitive.

Btw, az jó kérdés, hogy ez gáz-e. Az URL nem case insensitive, miért lenne az URL matching alapból az? A fájlnév sem számít annak.

Koszonom!

Ami pedig a case insensitivity-t illeti, ha index.php-t atdobja PHP-FPM-nek akkor dobja at az index.PHP-t is.
Annyit szeretnek elrni, hogy a vegfelhasznalo ne tudja a php file-t letolteni.

---------------------------------------------
Support Slackware: https://paypal.me/volkerdi

"azonban ha átírom a .php kiterjesztést .PHP-re vagy .Php-re"
> Ha kitörlöd a file-t akkor pedig hibát dob. sőt ha ékezetes filenevet használsz azt a web-en még mindig sok helyen nem honorálják. a megoldás egyszerű: ne tedd.

"Ennyi ideje regisztrált felhasználó: 17 év 18 hét"
Inkább az a gáz, hogy ezen időszak alatt nem szoktad meg azt, hogy a *nix rendszer case sensitive-ek

// Happy debugging, suckers
#define true (rand() > 10)

LOL!

A problema pont az hogy nagyon is megszoktam es epp ez a problema!

A nem letezo "index.PHP" hivasakor valami "file not found" jellegu dolgot varok, nem pedig azt hogy a letezo "index.php"-t letolti nekem a bongeszo

---------------------------------------------
Support Slackware: https://paypal.me/volkerdi

Nah, ez nem jött le az eredeti post-ból :)
Vagyis a szerveren index.php -ként éli életét, viszont ha böngészőben átírod az index.php -t index.PHP -ra, letölti?
Ez viszont egy nagyon fura viselkedés, kezdjük az elején:
- filerendszer?
Gyors check: könyvtárban $ cat index.php vs. $ cat index.PHP

- nginx config?

// Happy debugging, suckers
#define true (rand() > 10)

Történt egyszer, hogy az öcsém fejlesztett valamit Linuxon, és nekem is bele kellett molyolnom valamit, csakhogy nekem akkoriban épp csak Macem volt fejlesztőképes állapotban. Csodálkozva tapasztaltam, hogy a git clone után azonnal módosítottnak jelzett egy csomó file-t. A rejtély nyitja annyi volt, hogy az öcsémnél ilyen file-ok voltak például, hogy "a.jpg, b.jpg, A.jpg, B.jpg", és mivel a Mac alapesetben kis- és nagybetűk között nem tesz különbséget, rögtön már a clone folyamán vígan felülírta az A.jpg-vel az egy nanoszekundummal korábban letöltött a.jpg-t. Persze tudom, a Mac nem hardcore *nix, de ettől még tanulságos volt az eset.