Diferentes visualizações de sites ou sites em subpastas

29

Um cliente deseja que sua loja de armazenamento múltiplo seja configurada da seguinte maneira:

Este é um exemplo, mas pode haver muitas subpastas diferentes. Qual é a melhor abordagem para lidar com subpastas diferentes para diferentes visualizações de loja / sites?

Eu sei que uma solução é criar subpastas chamadas etc. de, ene copiar o index.php e .htaccess nas subpastas correspondentes.

Também pode haver algumas soluções alternativas (links simbólicos para a configuração index.php, vHost em vez de usar .htaccess) para minimizar a duplicação de arquivos, mas eu gostaria de encontrar uma solução em que não precise fazer nenhuma alteração no sistema de arquivos, mas apenas lidar com tudo por configuração.


ATUALIZAR

Verificamos com o suporte da empresa que a melhor maneira de fazer isso é criando subpastas.

Acabamos fazendo assim:

  • Crie um diretório "languagefolders"
  • Criou uma cópia do index.php dentro do diretório, juntamente com um .htaccess ajustado e links simbólicos para as pastas Magento (app /, errors /, ...)
  • Criou links simbólicos "de", "en" etc. dentro do diretório raiz do Magento, apontando para o diretório "languagefolders"

Dessa forma, podemos adicionar um novo idioma criando um novo link simbólico (por exemplo, "fr").

Matthias Zeis
fonte
Fizemos isso apenas para descobrir que o site não encontra nenhum produto ou categoria (Magento 404 / nenhuma rota para a página). Você encontrou isso também?
snh_nl
Não tanto quanto me lembro, desculpe. Você recriou todos os índices?
Matthias Zeis
Usamos o nginx e uma atualização é necessária para o conf para fazê-lo funcionar. Vou atualizar o meu comentário
snh_nl
2 coisas mais estranhas. 1) / checkout retorna 404 e 2) o seletor de idioma: se eu clicar em inglês, clique em inglês novamente, veremos que o uri continua adicionando / en / en / en / etc .... o que você escolheu como URL base? domain.com/en ou didi você mantê-lo como domain.com
snh_nl
Escolhemos domain.com/en/.
Matthias Zeis

Respostas:

18

É muito fácil veicular vários domínios / caminhos com base em URLs. Como mencionado, a configuração mais fácil (somente configuração) é possível quando os core/storecódigos exclusivos podem ser usados ​​no caminho como subpastas . Isso requer um dos seguintes:

  1. Os visitantes são vinculados ao caminho correto da subpasta inicialmente
  2. Os visitantes recebem uma página de destino na qual selecionam sua loja e recebem um cookie
  3. Algum mecanismo é usado para definir o tipo de execução e o código de execução antes do PHP manipular a resposta

Em relação ao item 3: desde o 1.4 Magento, foi possível permitir ao servidor da Web determinar o contexto de execução ( site ou loja ), bem como o código específico que deveria ser usado. Do index.php :

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

Enquanto as variáveis ​​de ambiente são usadas para inicializar o aplicativo, é possível influenciar o sistema antes que o PHP acelere. Com o Apache, mod_rewriteisso pode ser feito para subpastas com alguns truques:

RewriteCond %{REQUEST_URI} ^/de/$
RewriteRule .* - [E=MAGE_RUN_CODE:deutsch]
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
RewriteRule .* - [E=MAGE_RUN_CODE:%1]

O Apache é instável com variáveis ​​de ambiente e subpastas, como demonstrado por esta excelente resposta do SO . As duas linhas iniciais resultam $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';enquanto as duas últimas fornecem o necessário $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Existem muitos outros truques, mas o que foi dito acima já me mordeu antes.

O objetivo final deve ser a detecção inicial, tanto quanto for razoável (preocupações com o geoip + vários idiomas), enquanto faz com que o usuário defina o cookie da loja que pode ser usado para ignorar / percorrer a lógica nas solicitações subsequentes.

benmarks
fonte
1
Obrigado Ben. Fazendo dessa maneira, eu posso inicializar as visualizações da loja, mas sempre recebo a página do Magento 404 ("Opa, nosso mal"). Defino o URL base como domain1.org/en , domain.org/de e assim por diante. O URL da capa, a URL da mídia etc. estão definidos como domain.org/ (skin | mídia | ...) Observe que as páginas corretas serão retornadas se eu usar a abordagem normal "copy index.php and .htaccess".
Matthias Zeis
Aceitei esta resposta, pois ela se aproxima do que tentamos realizar (mesmo quando resolvemos um pouco diferente para nossos requisitos especiais).
Matthias Zeis
Realmente surpreso que a configuração "Adicionar código de loja ao URL" não funcionou.
benmarks 15/09/13
Os códigos da loja precisam ser exclusivos. Como deve funcionar com várias visualizações da loja, todas terminadas com de /, fr / ou en /?
Matthias Zeis 15/09/2013
Eu acho que eu perdi os códigos de loja duplicados, embora eu acho que eu estava assumindo algum Web servidor baseado reescrevendo (por exemplo mode_rewrite) com base em HTTP_HOST+ nível subpasta 1.
benmarks
9

Se os URLs recuados (subpastas) puderem ter o mesmo nome que os códigos de loja (por que não?), Você poderá simplesmente ativar Configuration > Web > Url options > Add Store Code to Urls.

Alex
fonte
Correto, você nem precisará de subpastas. enquanto a reescrita de URL estiver ativada, o Magento saberá que "en" é um código de visualização de armazenamento e não procurará uma subpasta.
Paul Grigoruta
8
O problema com esta solução é que o Magento permite apenas um código de loja "de" em uma instalação do Magento. Então se você tem vários sites com os mesmos idiomas que você tem que usar códigos de loja diferentes, por exemplo de_DE, de_en, ...
therouv
2
Rouven entendeu. O problema é que você não pode ter várias lojas com o mesmo código de loja.
Anna Völkl
Sim, o problema é que - como Rouven disse - você não pode ter duas visualizações de loja usando o mesmo código de loja.
Matthias Zeis
Confirmo que Rouven acertou. Um bug foi relatado ao Magento. Como nesses ambientes modernos com mais multistores, isso deve funcionar. No entanto, você acha que seria possível tornar a configuração de Add store codes to urlstoreview? magento.stackexchange.com/questions/60686/... = suponhamos que há uma multistore com domínios sep, os outros usos / pt e / fr
snh_nl
3

acabamos fazendo exatamente isso

Verificamos com o suporte da empresa que a melhor maneira de fazer isso é criando subpastas.

Acabamos fazendo assim:

  • Crie um diretório "languagefolders"
  • Criou uma cópia do index.php dentro do diretório, juntamente com um .htaccess ajustado e links simbólicos para as pastas Magento (app /, errors /, ...)
  • Criou links simbólicos "de", "en" etc. dentro do diretório raiz do Magento, apontando para o diretório "languagefolders"

Dessa forma, podemos adicionar um novo idioma criando um novo link simbólico (por exemplo, "fr").

No back-end, configuramos a loja base urlcomodomain.com/en

Se você usar o nginx, será necessária uma atualização para o processamento da sua localização para processar o index.php também na nova subpasta. Isso precisa ser feito para cada nova pasta de tradução

snh_nl
fonte
snh_nl Existe uma chance de você explicar o que suas duas últimas linhas significam? Estou com o mesmo problema que você disse anteriormente, mas não consigo entender: se você usar o nginx, será necessária uma atualização no processamento da sua localização para processar o index.php também na nova subpasta. Isso precisa ser feito para cada nova pasta de tradução. Estou usando o nginx e estou tentando fazer o mesmo. Graças
VBAK
location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl
2

Há uma entrada na base de conhecimento oficial do Magento que descreve exatamente isso.

Caso você esteja trabalhando com o Apache, verifique se todas as entradas do Host virtual (para cada domínio) estão apontando para a mesma raiz do documento onde está a instalação do Magento. Isso é para vários domínios.

A próxima (e última) coisa é o .htaccess na mesma pasta de instalação do Magento. .htaccess é um poderoso arquivo de configuração no nível do diretório em que você pode definir ações-regras por cada solicitação do servidor. Portanto, você precisará lidar com todas as diferentes ações (sub) domínios / pastas e definir as variáveis ​​de servidor corretas que o Magento usa no estágio de inicialização.

Depois de concluir a configuração do servidor, você terá que definir caminhos base diferentes para cada loja no Magento admin (sistema - configuração - geral - web).

Portanto, certifique-se de seguir o guia oficial (que também é o caminho preferido) e as coisas devem funcionar sem problemas.

Jernej Golja
fonte
1
A questão não era sobre vários domínios.
Fabian Schmengler
A pergunta era sobre a configuração de vários armazenamentos com vários domínios (.org e .ch são domínios diferentes). Porém, isso não importa, porque a resposta fornecida descreve uma solução para a configuração de vários armazenamentos, independentemente de você possuir vários domínios, subdomínios ou apenas subpastas diferentes para cada uma de suas lojas.
Jernej Golja
1
Mas o foco estava nos caminhos para as visualizações da loja, não parecia que os domínios eram um problema. De qualquer forma, depois da sua edição, mudei meu voto.
Fabian Schmengler
1
Exatamente, o problema não é que vários domínios precisam ser usados, mas que várias lojas devem compartilhar o mesmo caminho / "subpasta", o que não é possível adicionando códigos de loja ao URL.
Matthias Zeis
-2

Primeiro você precisa fazer algumas configurações no painel de administração do Magento, depois criar um subdiretório e mover o index.php e o .htaccess para o subdiretório, e fazer algumas pequenas alterações no index.php.

Aqui está um exemplo completo de como fazer isso.

caçador
fonte