Info / Dicas

17 mai 2013 11h21

Nginx rewrite - Kinghost

  • URL Curta:
Gosto muito da Kinghost, mas tem um tempo que eles migraram meu servidor de Apache (meu querido apache) para o Nginx. Já dá pra imaginar o transtorno certo? Como eles alegaram que o site estava consumido muito recurso do servidor, fazer o que né?

As regras são implementadas via painel próprio, muito bom, mas que não permite total liberdade como apache. Consegui converter a maioria das regras, pelo painel deles mesmo e o site antigo, ficou funcionado pelas metades. Inclusive peço desculpas a todos, pois estava trabalhando na nova versão e acabei deixando a antiga sem funcionar muito bem.

Inicialmente os maiores problemas que tive foi com as regras dentro de subdomínios. Aqui uso subdomínios para dividir o carregamento de arquivos e imagens( subs: st, img, i1, i2, i3).

Para acabar de completar a confusão, passo os parâmetro da imagem via rewrite, para gerar miniaturas, etc. Infelizmente o suporte ajudou pouco e tive que procurar soluções alternativas.

1ª dica - pastas

Para aplicar as regras nas pastas, você precisa escolher o diretório de origem, exemplo: /comunidade/

E neste caso você pode usar uma regrar do apache que ele converte, porém especificando a pasta, já que no apache, o .htaccess fica dentro da pasta.

Antes:
RewriteRule ^page/([0-9]+)/?$ /comunidade/index.php?page=$1 [L,QSA]


Depois:
RewriteRule ^/comunidade/page/([0-9]+)/?$ /comunidade/index.php?page=$1 [L,QSA]


Assim você pode jogar numa área de texto no painel que ele irá converter e funcionar. Este exemplo é do fórum bbpress.

2ª dica - extensão

Este foi o meu maior problema, pois a kinghost não aceita de forma alguma você passar extensões via parâmetros, aqui tive problema com .js, .jpg, .png, .gif, etc.

Exemplo: JS
Você quer pegar um arquivo javascript.php e passar ele para javascript.js para ficar "padronizado".
RewriteRule ^javascript.js$ js/javascript.php


Pelo servidor Nginx, a kinghost não aceita, tentei de tudo, mandei e-mail para suporte e nada.
Resolvi usar .jshtml, extensões personalizadas funciona normalmente.
RewriteRule ^javascript.jshtml$ js/javascript.php


As imagens a mesma coisa, tive que usar : ao invés de . nas imagens

Como trabalho com apache em localhost, ou se precisar usar o apache novamente, para ficar fácil definir uma constante SRV
define('SRV', 'nginx');


Assim quando busco o path real das imagens, preciso substituir . por :
if(SRV == 'nginx'){ $re['path'] = str_replace('.', ':', $re['path']); }


E no arquivo que gera as imagens preciso fazer o inverso : por .
if(SRV == 'nginx'){ $img['arquivo'] = str_replace(':', '.', $img['arquivo']); }


Onde
$img['arquivo']


Seria o parâmetro passado via rewrite. Se você quiser usar extensão original basta alterar o SRV
define('SRV', 'apache');


Entretanto se você quiser usar os : no apache irá funcionar da mesma forma.

© MNDTI - Tecnologia e Informação. Todos Direitos Reservados. Política de privacidade.