I have nginx and I trying create rule in the double condition (if) and double rewrite.
The schema is: URL (/direct/file.11223344_aabbcc.js) -> if no file -> [Yes] rewrite to /direct/file_aabbcc.js -> if no (rewrited) file -> [Yes] rewrite to /direct/file.js
I write in the config-file nginx this rules, but nginx exec first rewrite only and send error 404.
if (!-e $request_filename) {
rewrite ^/([a-zA-Z0-9\-\_\\\/]*)\.[0-9]+(\_[a-z0-9]+)*\.(js|css)$ /$1$2.$3 break;
}
if (!-e $request_filename) {
rewrite ^/([a-zA-Z0-9\-\_\/\\\.]*)\_[a-z0-9]+\.(js|css)$ /$1.$2 break;
}
In log-file out this messages:
2016/10/14 10:45:25 [notice] 13676#0: *1 "^/([a-zA-Z0-9\-\_\\/]*)\.[0-9]+(\_[a-z0-9]+)*\.(js|css)$" matches "/direct/file.11223344_aabbcc.js", client: 10.0.0.10, server: 10.0.0.1, request: "GET /direct/file.11223344_aabbcc.js HTTP/1.1", host: "10.0.0.1"
2016/10/14 10:45:25 [notice] 13676#0: *1 rewritten data: "/direct/file_aabbcc.js", args: "", client: 10.0.0.10, server: 10.0.0.1, request: "GET /direct/file.11223344_aabbcc.js HTTP/1.1", host: "10.0.0.1"
2016/10/14 10:45:25 [error] 13676#0: *1 open() "/var/www/html/direct/file_aabbcc.js" failed (2: No such file or directory), client: 10.0.0.10, server: 10.0.0.1, request: "GET /direct/file.11223344_aabbcc.js HTTP/1.1", host: "10.0.0.1"
Double if not work (down nginx). Double rewrite too (second rewrite use first requiest).
In the Apache this rules worked perfectly:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9\-\_\/\\]*)\.[0-9]+(\_[a-z0-9]+)*\.(js|css)/?$ $1$2.$3 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9\-\_\/\\\.]*)\_[a-z0-9]+\.(js|css)/?$ $1.$2 [L,QSA]
Please, help me make up rules with double processing rewrites/conditions.
In Google I find examples without "if" only and his not work normally.
Yes! This is good:
if (!-e $request_filename) {
rewrite ^/([a-zA-Z0-9\-\_\\\/]*)\.[0-9]+(\_[a-z0-9]+)*\.(js|css)$ /$1$2.$3 last;
rewrite ^/([a-zA-Z0-9\-\_\/\\\.]*)\_[a-z0-9]+\.(js|css)$ /$1.$2 break;
}
And now nginx perfectly too!
Thank you all!