nginx regra de reescrita

1

Eu tenho a seguinte regra mod_rewrite

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

Eu preciso disso para trabalhar em nginx e tenho batido minha cabeça contra a parede para fazer isso funcionar

Obrigado!

UPDATE!

Aqui está uma explicação melhor do que estou tentando fazer

 store1.domain.com
 store2.domain.com

para que um usuário possa acessar store1.domain.com/products/ e o URL permanecerá lá

Fazemos isso no apache como

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

Também temos um dz catchall que enviará todos os * .domain.com para um padrão apache vhost. Eu estou batendo minha cabeça contra a parede para fazê-lo funcionar nginx para manter o nome do host o mesmo, mas nos bastidores reescrever o domínio para o magento analisar.

Aqui está o que eu tenho, mas continua anexando / magento / magento / magento até o fim até matar o loop

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

O problema acima é que ele continua reescrevendo-o como

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

Aqui está um log de erros para ele

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"
    
por Mike 03.11.2009 / 19:55

1 resposta

1

Tente algo assim:

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

UPD:
Você também pode excluir nomes de host e redirecionamentos já feitos via localização + if + regex dentro de server {} section

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

PS. Eu acho que isso poderia ser feito mais sexy usando 2 server {} blocos, mas estou com preguiça de pensar nisso agora =)

    
por 03.11.2009 / 20:26