1

I have the following mod_rewrite rule

RewriteCond %{HTTP_HOST} !^(host)\.doamin\.com [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com [NC]
RewriteRule ^(.*) /magento/$1 [L]

I need that to work in nginx and I've been slamming my head against the wall to make it work

Thanks!

UPDATE!

Here is a better explanation of what I'm trying to do

 store1.domain.com
 store2.domain.com

so a user can go into store1.domain.com/products/ and the url will stay there

We do this in apache like

RewriteCond %{HTTP_HOST} !^(host)\.domain\.com [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com [NC]
RewriteRule ^(.*) /magento/$1 [L]

We also have a dns catchall that will send all *.domain.com to a default apache vhost. I'm slamming my head against the wall to get it working in nginx to keep the hostname the same but behind the scenes rewrite the domain for magento to parse.

Here is what I have but it just keeps appending /magento/magento/magento to the end till it kills the loop

    if ($http_host !~ "^www.domain\.com$") {
        rewrite ^.+ http://$http_host/magento/$uri last;
        break;
    }

The problem with the above is it keeps rewritting it as

store1.domain.com/magento/
store1.domain.com/magento/magento/
store1.domain.com/magento/magento/magento/ and so on

Here is a error log for it

2009/11/03 15:40:26 [error] 22347#0: *2 rewrite or internal redirection cycle while processing "/magento//magento//magento//magento//magento//magento//magento//magento//magento//magento//magento//catalogsearch/advanced/result/", client: 127.0.0.1, server: laptop, request: "GET /catalogsearch/advanced/result/?featured=1 HTTP/1.1", host: "store1.domain.com"

1 Answer 1

1

Try something like this:

server
{
    listen 80;
    server_name *.domain.com ;
    rewrite ^.+ httр://$host/magento/$uri last;
    break;
}

UPD:
You also can exclude hostnames and already done redirects via location+if+regex inside server {} section

location !~ \/magento\/
{
    if ($host !~ "^(www|host)\.domain\.com$")
    {
    // Here goes your rewrite
    }
}

PS. I think this could be done more sexy using 2 server {} blocks, but I'm too lazy to think about it now =)

5
  • that got me 50% of the way there. I need it to ignore www.domain.com and host.domain.com and keep the url if you go to store1.domain.com/products/ it doesn't get redirected to domain.com/magento/products i need to pass the uri to /magento/ and keep the hostname there
    – Mike
    Nov 3, 2009 at 19:58
  • Check now. Is it suitable for you? Nov 3, 2009 at 20:15
  • Thanks.. its getting there.. I updated my post to better describe my situation. thanks for the help
    – Mike
    Nov 3, 2009 at 20:53
  • Author of nginx strongly disapproves constructs like if ($host !~ ... ) Don't bother with apache rewrites. Just state your problem in simple terms. AFAIU, you need: www.domain.com/anything stays the same store1.domain.com/anything rewrites to store1.domain.com/magento/anything am I right? Is that all there is?
    – squadette
    Nov 11, 2009 at 16:51
  • You need to redirect every subdomain except host and www. I've already said that the right move will be making 2 server {} directives one matching ~ ^(www|host)\.domain\.com$ and other !~ ^(www|host)\.domain\.com$ but it'll be less customizeble i.e. you can't add any other domain to such configuration. Nov 12, 2009 at 14:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .