Nginx vs .htaccess

 ( sharky | 2014. június 5., csütörtök - 16:10 )

Kostolgatom az Nginx -et, sikerult is beloni, de valami nem az igazi: ha egy GET parameter szokozt tartalmaz, akkor megbolondul, mert nem jol ertelmezi a parametereket.
Nem szeretnek tulsagosan belemenni a reszletebe, azt biztosan tudom, hogy a rewrite -al van a gond, mert apache -al rendesen mukodik.

Az adott szerveren lenne tobb web app ( ebben a peldaban a demo/app1 lenne ).

/var/www ->root

/var/www/demo/app1/.htaccess:

RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

/var/www/demo/app1/public/.htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

-------------------
Ez nginx -ben igy nez ki:

location /demo/app1/ {
index public/index.php;
if (!-e $request_filename) {
rewrite ^/demo/app1/(.*)$ /demo/app1/public/index.php?url=$1 last;
}
}

Mint mondtam nem szeretnek tulsagosan belemerulni a reszletekbe, hogy mi es miert, csak annyiban szeretnek segitseget kapni, hogy hogyan javitsam ki a rewrite -ot.
Koszonom!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

(sub)

Mi az Nginx verziója? Ezt a bugot elvileg már javították.

if-et nem szerencsés használni itt, inkább így:


location /demo/app1/ {

index public/index.php;
try_files $uri @rewrite;

}

location @rewrite {

rewrite ^/demo/app1/(.*)$ /demo/app1/public/index.php?url=$1 last;

}

Eltekintve a mások által is említett IfIsEvil problémától, van egy lényeges dolog, amit gyakorlatilag pont az if miatt nem jól konvertáltál:
A .htaccess-ben lévő fájlteszt a /var/www/demo/app1/public alatt keres, az nginx-es megoldás viszont egy könyvtárral feljebb!
Kb. az alábbi fejezi ki egy az egyben a htaccesses megoldást:

location /demo/app1/ {
    rewrite /demo/app1/(.*)$ /demo/app1/public/$1;
}

location /demo/app1/public/ {
    index index.php;
    try_files $uri @rewrite; 
}

location @rewrite {
    rewrite ^/demo/app1/public/(.*)$ /demo/app1/public/index.php?url=$1 last; 
}