Portál AbcLinuxu, 24. července 2025 06:46


Dotaz: nginx regex v location + php

3.5.2018 15:32 MP
nginx regex v location + php
Přečteno: 160×
Odpovědět | Admin
Ahoj,

mam rekneme tohle:
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$args;
        }
	location ~ ^/([a-z][a-z]/|)(?:(aaa|bbb|ccc)/?(.*?)|)$ {
		try_files $uri /index.php?a=$1&$args;
	}
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
Pokud volam neco, co spadne do "/" a je .php, tak se zpracuje i php blok. Pokud volam ale ten regex location a je i .php, tak se jiz k php bloku nedostane a misto zpracovani php se zobrazi zdrojak. Jak z toho ven, aniz bych musel do toho regex location bloku pridavat znovu definici php bloku (at uz naprimo, nebo pres @)?

Diky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.5.2018 16:11 ttt
Rozbalit Rozbalit vše Re: nginx regex v location + php
Odpovědět | | Sbalit | Link | Blokovat | Admin
try_files postupně zkouší argumenty, pokud některý odpovídá existujícímu souboru, vrátí ho, poslední argument pak umožňuje definovat, co se stane, pokud nic nenajde. V tomto případě nejspíš soubor odpovídající $uri existuje a tak se zobrazí. Hádám, že místo toho chceš rewrite.
3.5.2018 16:45 MP
Rozbalit Rozbalit vše Re: nginx regex v location + php
S tim try_files to neni presne. Co jsem zatim zahledl, tak je to spis tim, ze je to stejny typ bloku jako pro php (v obou pripadech regex), tak se jiz dalsi neprohledava. Jo, kdybych vedel, jak to prepsat do rewrite, tak bych si dokazal pomoci s "last", coz by vyvolalo opetovne prohledani stromu - ale pokud se na to spravne divam, tak by zase spadl do stejneho typu bloku...

Zatim jsem to vyresil natvrdo tim, ze jsem ten php blok vlozil jako vnitrni location, ale pokud existuje lepsi cesta...
3.5.2018 17:11 ttt
Rozbalit Rozbalit vše Re: nginx regex v location + php
Nginx vždy najde jen jeden blok, který se provede. Výsledkem toho provedení může být i vnitřní přesměrování (internal redirect), při kterém vznikne nová adresa, pro tu se znovu hledá blok, kterým se vyhodnotí. Regexpy jsem nezkoumal, pokud ten první namatchuje všechno, co ten druhý, tak bych prohodil jejich pořadí.
3.5.2018 17:49
Rozbalit Rozbalit vše Re: nginx regex v location + php
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://nginx.org/en/docs/http/ngx_http_core_module.html#location

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.