Loja multilíngue como subdiretório com link simbólico no nginx retornando 'nenhuma rota para a página'
-
12-12-2019 - |
Pergunta
precisávamos configurar nossa loja multilíngue usando o subdirectory/symlink
método descrito aqui.(leia por que @ bottom)
Como fizemos isso. Copiamos index.php para um subdiretório e vinculamos simbolicamente todas as pastas.O base url
foi definido para domain.com/en
Problema/PerguntaAgora, quando abro domain.com/en, posso ver o site e ele mostra a versão em inglês.A única coisa é que todos os links de categorias e produtos produzem um erro “sem rota para a página”.Em vez de mostrar a categoria ou produto.Agora, como pode ser isso?
ExemploEntão https://domain.com/en/funkyshoes
não abre a categoria funkyshoes, e nem funkyshoes https://domain.com/funkyshoes
para esse assunto.https://domain.com/en/funkyshoes
retorna => no route to page
https://domain.com/funkyshoes
retorna => https://domain.com/en
por que não?porque temos mais de 1 multistore e não podemos fornecer a cada loja um store_code lang como en/de/fr e também temos um multistore com domínios diferentes por loja e o outro usando o método /en, /de, /fr do domínio principal .
Solução 2
Uma solução ainda melhor é:
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite /(../)? /$1index.php?$args;
}
porque tínhamos algumas regras de localização especiais para catalog|checkout|customer.O problema é que todos referenciaram @rewrite - desta forma tivemos que reescrever TODOS os comandos de localização que foram configurados para também ter uma correspondência separada para /en e posteriormente /fr e /de .....
Então, criamos a reescrita alternativa mais simples que testa primeiro para / e depois para /(código de duas letras) ....e reescreve com base nisso
parece funcionar bem
Além disso, a pesquisa store_code precisa ser alterada.Por causa do /en, a variável http_host ou a variável do servidor não funcionam mais.
Uma possível solução pode ser encontrada aqui:https://stackoverflow.com/questions/30078679/nginx-conf-w-multiple-maps-to-same-variable
Outras dicas
Este é um problema do NGINX.
Adicionar isso a um arquivo conf resolveu nosso problema
location /en {
rewrite ^/en(.*)$ /en/index.php last;
}