Apache rewrite in Nginx format
Philip Murray
pmurray at open2view.com
Thu Sep 27 06:04:31 MSD 2007
On 26/09/2007, at 11:14 PM, Igor Sysoev wrote:
> On Wed, Sep 26, 2007 at 04:18:43PM +1200, Philip Murray wrote:
>
>> Is it possible to express the following Apache rewrite rule in Nginx?
>>
>> RewriteCond %{QUERY_STRING} !^nobranding$
>> RewriteCond %{REQUEST_FILENAME} ^/assets/XL/([^.]+)\.([jpegif]+)$
>> RewriteCond /usr/local/www/assets-nz/XL/%1.branded.%2 -f
>> RewriteRule ^/([^.]+)\.([jpeg]+)$ /$1.branded.$2
>>
>> In Nginx, this would be in a location block with an alias, so
>>
>> location /assets {
>> alias /usr/local/www/assets-nz/;
>>
>> ... rewrites go here ...
>> }
>>
>> But, I understand you can't rewrite with an alias present? So how can
>> I implement the above Apache rewrite?
>
> Try
>
> location /assets {
>
> if ($args = nobranding) {
> rewrite ^(.+)$ /nobranding$1 last;
> }
>
> rewrite ^/assets/XL/(.+)\.(jpeg|jpg|gif) /XL/$1.branded.$2;
> root /usr/local/www/assets-nz;
> error_page 404 = /nobranding/assets$uri;
> }
>
>
> location /nobranding/assets {
> internal;
> alias /usr/local/www/assets-nz/;
> }
>
Thanks Igor, that works... but to throw a spanner into the works, I
have at the end of this configuration:
location / {
root /path/to/rails/public/
# ... lots of rewrites for fixing up old URLs
if (!-f $request_filename) {
proxy_pass http://mongrel;
break;
}
}
And the !-f/proxy_pass seems to pick up the request in the case where
blah.branded.jpeg doesn't exist (and should just serve blah.jpeg
instead), and thus passing it through to mongrel.
Is there a way to force the /nobranding/assets location to be used.
Do rewrites alter $uri ?
Cheers
Phil
More information about the nginx
mailing list