Código da loja no URL para todas as visualizações da loja, exceto a padrão


10

Ativei Sistema > Configuração > Web > Adicionar código de loja a URLs e configurei uma nova Visualização de loja para o Canadá (/ ca /).

Idealmente, gostaria de ter example.com/ca/ para carregar a Visualização da loja do Canadá, mas ainda assim ter example.com (sem o defaultcódigo da loja) para a loja padrão.

Percebi que a página inicial funciona bem nesse sentido, mas quando entro em uma página de produto, o Magento inclui automaticamente o código da loja no URL.

O principal motivo pelo qual hesito em alterar nossos URLs atuais para nossa loja padrão é apenas porque eu odiaria vê-los perder qualquer suco de link. Sei que teoricamente, desde que eu configurei os redirecionamentos 301, eu ficaria bem, mas acho que li em algum lugar que uma pequena quantidade de suco ainda está perdida.

Além disso, acho que isso provavelmente é um pouco melhor do ponto de vista da usabilidade. Se a maior parte do seu tráfego é para sua loja padrão e seus clientes estão acostumados com o URL normal, por que incomodá-los com o adicional /default/( /us/ou qualquer outro) no URL.

Tentei desativar o Adicionar código da loja aos URLs e simplesmente alterar o URL base da minha Visualização da loja do Canadá para example.com/ca/, mas isso não pareceu fazer nada. Suponho que ele precise da configuração ativada para pegar o código da loja no URL e fazer qualquer coisa com ele.

Respostas:


9

Não fiquei satisfeito ao usar Adicionar código de loja a URLs . O principal motivo foi que não poderíamos ter várias visualizações de loja usando o mesmo idioma (veja minha pergunta ). Além disso, eu não gostei, tenho que usar um código de exibição de loja ruim apenas por causa da URL.

Fiz um pequeno teste usando a dica "criar uma subpasta e criar links simbólicos" frequentemente recomendada e pode funcionar. Por favor, verifique se você gosta.

  • Crie uma subpasta / ca /
  • Dentro da subpasta, crie links simbólicos para
    • ../aplicativo
    • ../errors
    • ../includes
    • ../index.php
    • ../js
    • ../lib
    • ../meios de comunicação
    • ../pele
    • ../var
    • (adicione outros diretórios se desejar / precisar)
  • edite sua configuração do vHost para / ca / ​​(ou copie .htaccess para / ca / ​​e edite) para

    • Defina a base de reescrita:

      RewriteBase /ca/

    • Inicialize a exibição correta da loja com base no URL. Existem muitas maneiras de fazer isso, uma pode ser:

      RewriteCond %{REQUEST_URI} ^/ca/.* [NC,OR]
      RewriteCond %{REQUEST_URI} ^/ca$ [NC]
      RewriteRule .* - [E=MAGE_RUN_CODE:ca]
      RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
      RewriteRule .* - [E=MAGE_RUN_CODE:%1,E=MAGE_RUN_TYPE:store]`

Funcionou para mim:

Criar pastas e links simbólicos não é divertido, mas pelo menos você não precisa editar arquivos principais.


2
Você só precisa criar links simbólicos para mídia, js e skin e editar o caminho da classe Mage para ../app/Mage.php. Tanto quanto eu sei que deve ser suficiente
Sander Mangel

2
Sim, se você deseja editar os arquivos principais.
Matthias Zeis

@MatthiasZeis desculpe por demorar tanto para aceitar! Às vezes, perco o controle das notificações do SE e é difícil marcá-las como não lidas. Sinta-se à vontade para me enviar um ping no twitter no futuro, se eu demorar uma eternidade para marcar uma resposta como aceita! Pelo menos com o twitter, você pode adicionar um tweet como favorito para se lembrar de voltar a ele. Desculpe e obrigado novamente pela ajuda aqui! Ótima resposta!
kalenjordan

Não se preocupe! Estou feliz por poder ajudá-lo.
Matthias Zeis

2
Great aconselhar! Duas simplificações possíveis: 1) Uma vez que você criar configurações VHost separadas ou arquivos .htaccess para o subdiretório, você pode inicializar a visão direta loja sem condições: SetEnv MAGE_STORE_VIEW ca. RewriteBasepor outro lado, geralmente não é necessário. 2) Deve ser suficiente para links simbólicos conjunto para index.php e aplicativo, se você só definir a base de dados de URL do link para / ca / e deixe o padrão URL Base de dados de configuração
Fabian Schmengler


1

Com base na resposta do comentário de mzeis e fschmengler , aqui está uma maneira de fazê-lo:

  1. Crie um subdiretório ca:mkdir ca
  2. Crie um link simbólico para o appdiretório:ln -s ../app/ ca/app
  3. Crie um link simbólico para o index.phparquivo:ln -s ../index.php/ ca/index.php
  4. Crie um .htaccessarquivo no cadiretório: touch ca/.htaccesscom o seguinte conteúdo:

    SetEnv MAGE_RUN_CODE ca
    
    RewriteEngine On
    RewriteBase /en/
    
    # solves the issue that the environment variable MAGE_RUN_CODE is only available as REDIRECT_MAGE_RUN_CODE
    # see http://stackoverflow.com/a/10128290/719023 for details
    RewriteOptions inherit
  5. Em System > Configuration > Web, defina Base Link URLcomo {{unsecure_base_url}}ca/e {{secure_base_url}}ca/respectivamente.

Se, por algum motivo, a RewriteOptions inheritpeça não for possível, você também pode simplesmente copiar a peça padrãomod_rewrite no seu .htaccessarquivo de subdiretório .

Essa solução deve funcionar tão bem quanto a dos mzeis, mas é muito menor e mais fácil.


0

outra opção é usar um subdomínio por loja. Então você acabou de configurar o Apache para dizer ao magento qual "site / loja" usar.

Dessa forma, você pode ter várias "lojas" e "visualizações" nos sites de subdomínios, todos no mesmo magento intall.

  • as configurações estão em Sistema> Configuração> Geral / Web
  • Inseguro. URL base
  • Seguro. URL base
  • Biscoito . Domínio

esta é a configuração do Apache da loja example.com

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "default"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

esta é a configuração adicional do Apache da loja "ca"

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName ca.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "ca"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

0

Juste adicione isso a um dos seus arquivos system.xml (no aplicativo / código / módulo local):

<sections>
    <web>
        <groups>
            <url>
                <fields>
                    <use_store>
                        <show_in_store>1</show_in_store>
                    </use_store>
                </fields>
            </url>
        </groups>
    </web>
</sections>

Dessa forma, você pode escolher a opção "Adicionar código da loja aos URLs" por visualização da loja.


Você é capaz de selecioná-lo. Mas você tem certeza de que realmente funciona?
Fabian Schmengler

Sim, testado no magento 1.9.xe no magento EE 1.13.x
nverhoye

Seria ótimo se isso realmente funcionasse, mas não consegui fazer isso funcionar em um ambiente com um site e várias visualizações de loja. Testado em CE 1.9.2.3.
Aad Mathijssen

não funcionou para mim
Visakh B Sujathan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.