Código de tienda en URL para cada vista de tienda, excepto la predeterminada

10

He habilitado Sistema > Configuración > Web > Agregar código de tienda a las URL y he configurado una nueva Vista de tienda para Canadá (/ ca /).

Idealmente, me gustaría tener example.com/ca/ cargar la vista de la tienda de Canadá, pero todavía tengo example.com (sin el defaultcódigo de la tienda allí) para la tienda predeterminada.

Me di cuenta de que la página de inicio funciona bien en este aspecto, pero cuando entro en una página de producto, Magento incluye automáticamente el código de la tienda en la URL.

La razón principal por la que dudo en cambiar nuestras URL actuales para nuestra tienda predeterminada es simplemente porque odiaría ver que pierdan cualquier enlace. Sé que, en teoría, siempre y cuando configure las redirecciones 301, debería estar bien, pero creo que he leído en alguna parte que todavía se pierde una pequeña cantidad de jugo.

Además, creo que esto es probablemente algo mejor desde una perspectiva de usabilidad. Si la mayor parte de su tráfico se dirige a su tienda predeterminada y sus clientes están acostumbrados a la URL normal, ¿por qué molestarlos con el adicional /default/( /us/o lo que sea) en la URL?

Intenté deshabilitar Agregar código de tienda a las URL y simplemente cambié la URL base de mi Vista de tienda de Canadá a example.com/ca/, pero eso no pareció hacer nada. Supongo que necesita la configuración habilitada para recoger el código de la tienda en la URL y hacer algo con él.

kalenjordan
fuente

Respuestas:

9

No me gustó usar Agregar código de tienda a las URL . La razón principal fue que no podíamos tener varias vistas de la tienda usando el mismo idioma (vea mi pregunta ). Además de eso, no me gustó tener que usar un código de vista de tienda incorrecto solo por la URL.

Hice una pequeña prueba con la sugerencia frecuentemente recomendada de "crear una subcarpeta y crear enlaces simbólicos" y puede funcionar. Por favor, compruebe si le gusta.

  • Crear una subcarpeta / ca /
  • Dentro de la subcarpeta crea enlaces simbólicos a
    • ../app
    • ../errors
    • ../incluye
    • ../index.php
    • ../js
    • ../lib
    • ../medios de comunicación
    • ../piel
    • ../var
    • (agregue otros directorios si lo desea / necesita)
  • edite su configuración de vHost para / ca / ​​(o copie .htaccess a / ca / ​​y edítelo) en

    • Establecer la base de reescritura:

      RewriteBase /ca/

    • Inicialice la vista de tienda correcta en función de la URL. Hay muchas formas de hacerlo, una puede 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]`

A mí me funcionó:

Crear carpetas y enlaces simbólicos no es divertido, pero al menos no tiene que editar archivos principales.

Matthias Zeis
fuente
2
Solo tiene que hacer enlaces simbólicos para medios, js y skin y luego editar la ruta de clase de Mage a ../app/Mage.php. Por lo que sé, eso debería ser suficiente
Sander Mangel
2
Sí, si desea editar archivos principales.
Matthias Zeis el
@MatthiasZeis lo siento por tomar tanto tiempo para aceptar! A veces pierdo el rastro de las notificaciones de SE y es difícil marcarlas como no leídas. ¡Siéntase libre de hacerme ping en Twitter en el futuro si me toma una eternidad marcar una respuesta como aceptada! Al menos con Twitter puedes marcar un tweet como favorito para recordar volver a él. Lo siento y gracias de nuevo por la ayuda aquí! ¡Gran respuesta!
kalenjordan
¡Sin preocupaciones! Me alegro de poder ayudarte.
Matthias Zeis
2
Gran consejo! Dos posibles simplificaciones: 1) Desde que se crean configuraciones VHOST separados o archivos .htaccess para el subdirectorio, puede inicializar el almacén de vista directa y sin condiciones: SetEnv MAGE_STORE_VIEW ca. RewriteBasepor otro lado generalmente no es necesario. 2) Debe ser suficiente para enlaces simbólicos conjunto a index.php y aplicación, si sólo se establece el enlace URL base a / ca / y deje el valor predeterminado Base URL de configuración
Fabian Schmengler
1

Basado en la respuesta del comentario de mzeis y fschmengler , aquí hay una forma de hacerlo de KISS:

  1. Crea un subdirectorio ca:mkdir ca
  2. Cree un enlace simbólico al appdirectorio:ln -s ../app/ ca/app
  3. Crea un enlace simbólico al index.phparchivo:ln -s ../index.php/ ca/index.php
  4. Cree un .htaccessarchivo en el cadirectorio: touch ca/.htaccesscon el siguiente contenido:

    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. Debajo System > Configuration > Web, establezca Base Link URLa {{unsecure_base_url}}ca/y {{secure_base_url}}ca/respectivamente.

Si, por alguna razón, la RewriteOptions inheritparte no es posible para usted, también puede simplemente copiar la parte predeterminadamod_rewrite en su .htaccessarchivo de subdirectorio .

Esta solución debería funcionar tan bien como la de mzeis, pero es mucho más pequeña y fácil.

Simón
fuente
0

Otra opción es utilizar un subdominio por tienda. Luego configuras Apache para decirle a magento qué "sitio web / tienda" usar.

De esta manera, puede tener múltiples "tiendas" y "vistas" en los sitios web de subdominio, todo en el mismo magento.

  • la configuración está en Sistema> Configuración> General / Web
  • Inseguro URL base
  • Seguro. URL base
  • Galleta . Dominio

esta es la configuración de Apache de la tienda example.com

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName example.com
    ServerAdmin [email protected]
    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 es la configuración adicional de Apache de la tienda "ca"

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName ca.example.com
    ServerAdmin [email protected]
    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>
Artistan
fuente
0

Simplemente agregue esto a uno de sus archivos system.xml (en la aplicación / 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>

De esta forma, puede elegir la opción "Agregar código de tienda a las URL" por vista de tienda.

nverhoye
fuente
Puedes seleccionarlo. Pero, ¿estás seguro de que realmente funciona?
Fabian Schmengler
Sí, probado en magento 1.9.xy magento EE 1.13.x
nverhoye
Hubiera sido genial si esto realmente funcionara, pero no he podido hacer que esto funcione en un entorno con un sitio web y múltiples vistas de la tienda. Probado en CE 1.9.2.3.
Aad Mathijssen
no funcionó para mí
Visakh B Sujathan