nginx reescreve a configuração

2

Sou muito novo no nginx e estou tentando configurar algumas regras simples de reescrita, mas elas não parecem estar funcionando.

Apenas para sua informação, esse server { .. } tem seu server_name domain.com *.domain.com .

Eu tenho esse rewrite ^ /index.php?/$request_uri; que parece funcionar muito bem. Isso corresponderá a domain.com/asd/sad/sad e tudo funcionará como deveria.

No entanto, eu gostaria de fazer algo interessante com subdomínios ... então eu tenho s1.domain.com e s198.domain.com , mas eu gostaria de mudar minha reescrita, então vai para /index.php?/s1/$request_uri se isso faz sentido? Então o subdomínio entra antes do $request_uri .

Isso é o que eu tentei até agora:

if ($host ~* ^([a-z]+)\..*) {
    rewrite ^(.*)$ /index.php?/$1/$request_uri;
}
rewrite ^ /index.php?/$request_uri;

Aprecie realmente qualquer ajuda que possa dar!

Obrigado.

    
por tarnfeld 10.06.2011 / 23:57

2 respostas

1

O primeiro de todos: o uso de if é desencorajado pelo autor do Nginx por uma boa razão: ele tem efeitos colaterais muito desagradáveis. Você ainda pode usá-lo em casos de uso simples, mas usar if e rewrite simultaneamente é como uma bomba.

Seu caso de uso pode ser facilmente implementado usando duas seções server :

server {
  server_name domain.com;

  rewrite ^ /index.php?/$request_uri last;
}

server {
  server_name ~ ^(?<SUB>.+)\.domain.\com$ ;

  rewrite ^ /index.php?/$SUB/$request_uri last;
}
    
por 11.06.2011 / 13:43
0

Você pode alterar sua regra para

rewrite ^ /index.php?/$host/$request_uri;

mas infelizmente você recebe "caminhos" como "/index.php?/s1.domain.com/asd/sad/sad", não "/index.php?/s1/asd/sad/sad" parece ser depois.

Você pode simplesmente usar a variável $_SERVER['HTTP_HOST'] em seu script PHP e descobrir a mudança apropriada dentro do próprio script, em vez de fazer com que o nginx faça todo o trabalho?

Editado para adicionar:

Escrevi isso antes de postar seu comentário sobre o FuelPHP; não sei o que é isso, mas presumo que significa que você é incapaz ou não quer (não que isso seja uma coisa ruim) fazer uma mudança no roteiro como sugeri. Embora a regra do Apache que você postou lá não faça automaticamente o que você está pedindo por um determinado subdomínio - ele funciona para dev.domain.com, mas nenhum outro.

    
por 11.06.2011 / 00:07