Хранить код в URL для каждого вида магазина, кроме стандартного

10

Я включил Систему > Конфигурация > Интернет > Добавить код магазина в URL-адреса и настроил новый режим просмотра магазина для Канады (/ ca /).

В идеале я бы хотел, чтобы example.com/ca/ загрузил представление магазина в Канаде, но при этом оставил example.com (без defaultкода магазина) для магазина по умолчанию.

Я заметил, что домашняя страница прекрасно работает в этом отношении, но когда я захожу на страницу продукта, Magento автоматически включает код магазина в URL.

Основная причина, по которой я не решаюсь изменить наши текущие URL-адреса для нашего магазина по умолчанию, заключается в том, что я не хотел бы видеть, как они теряют любой ссылочный сок. Я знаю, что теоретически, пока я настраиваю перенаправления 301, у меня все будет хорошо, но я думаю, что где-то читал, что небольшое количество сока все еще теряется.

Кроме того, я думаю, что это, вероятно, несколько лучше с точки зрения удобства использования. Если основная часть вашего трафика приходится на ваш магазин по умолчанию, а ваши клиенты привыкли к обычному URL, зачем их беспокоить дополнительным /default/( /us/или каким-либо другим) в URL.

Я пытался отключить функцию добавления кода магазина в URL-адреса и просто изменить базовый URL-адрес для моего представления магазина в Канаде на example.com/ca/, но, похоже, это не помогло. Я предполагаю, что для этого нужно включить настройку, чтобы подобрать код магазина в URL и что-то с ним сделать.

kalenjordan
источник

Ответы:

9

Я не обрадовался, добавив код магазина в URL . Основной причиной было то, что у нас не могло быть нескольких просмотров магазина на одном языке (см. Мой вопрос ). Кроме того, мне не понравилось, что я вынужден использовать плохой код магазина из-за URL.

Я провел небольшой тест, используя часто рекомендуемый совет «создать подпапку и создать символические ссылки», и он может сработать. Пожалуйста, проверьте, если вам это нравится.

  • Создать подпапку / ca /
  • Внутри подпапки создайте символические ссылки на
    • ../приложение
    • ../errors
    • ../включает в себя
    • ../index.php
    • ../js
    • ../lib
    • ../СМИ
    • ../skin
    • ../var
    • (добавить другие каталоги, если хотите / нужно)
  • отредактируйте вашу конфигурацию vHost для / ca / ​​(или скопируйте .htaccess в / ca / ​​и отредактируйте ее) в

    • Установите базу для перезаписи:

      RewriteBase /ca/

    • Инициализируйте правильное представление магазина на основе URL. Есть много способов сделать это, один может быть:

      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]`

Это сработало для меня:

Создание папок и символических ссылок не очень весело, но, по крайней мере, вам не нужно редактировать основные файлы.

Матиас Цейс
источник
2
Вам нужно только создать символические ссылки для media, js и skin, а затем отредактировать путь к классу Mage ../app/Mage.php. Насколько я знаю, этого должно быть достаточно
Сандер Мангель
2
Да, если вы хотите редактировать основные файлы.
Матиас Цейс
@MatthiasZe извините, что так долго принимал! Иногда я теряю отслеживание уведомлений SE, и их трудно пометить как непрочитанные. Не стесняйтесь пинговать меня в твиттере в будущем, если я всегда буду отмечать ответ как принятый! По крайней мере, в твиттере вы можете добавить твит в избранное, чтобы не забыть вернуться к нему. Извините и еще раз спасибо за помощь здесь! Отличный ответ!
Календжордан
Не беспокойся! Я рад, что смог помочь тебе.
Матиас Зейс,
2
Отличный совет! Два возможные упрощения: 1) Так как создавать отдельные конфигурации ВХоста или файлы .htaccess для подкаталога, вы можете инициализировать магазин просмотр несложный без условий: SetEnv MAGE_STORE_VIEW ca. RewriteBaseс другой стороны, обычно в этом нет необходимости. 2) Этого должно быть достаточно, чтобы установить символические ссылки на index.php и app, если вы только установите URL-адрес базовой ссылки на / ca / ​​и оставите конфигурацию базового URL-адреса по умолчанию
Фабиан Шменглер,
2

Пользователь clockworkgeek создал модуль Magento-Store-Codes только для этого варианта использования.

Я проверил это на CE 1.9.2.3 с одной установкой веб-сайта с несколькими представлениями магазина, и это, казалось, работало отлично!

Читайте также: Magento: Как скрыть код по умолчанию Store View из URL

Аад Матейссен
источник
1

Основываясь на ответе комментариев mzeis и fschmengler , вот KISS способ сделать это:

  1. Создайте подкаталог ca:mkdir ca
  2. Создайте символическую ссылку на appкаталог:ln -s ../app/ ca/app
  3. Создайте символическую ссылку на index.phpфайл:ln -s ../index.php/ ca/index.php
  4. Создайте .htaccessфайл в caкаталоге: touch ca/.htaccessсо следующим содержанием:

    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. Под System > Configuration > Web, установить Base Link URLна {{unsecure_base_url}}ca/и {{secure_base_url}}ca/соответственно.

Если по какой-то причине эта RewriteOptions inheritчасть невозможна для вас, вы также можете просто скопировать часть по умолчаниюmod_rewrite в .htaccessфайл подкаталога.

Это решение должно работать так же хорошо, как решение от mzeis, но намного меньше и проще.

Саймон
источник
0

Другой вариант - использовать поддомен для каждого магазина. Затем вы просто настраиваете Apache, чтобы сообщить magento, какой «сайт / магазин» использовать.

Таким образом, вы можете иметь несколько «магазинов» и «просмотров» на сайтах поддоменов в одном magento intall.

  • Настройки находятся в Система> Конфигурация> Общие / Веб
  • Ненадежный. Базовый URL
  • Безопасно Базовый URL
  • Печенье Домен

это конфиг Apache на сайте 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>

это дополнительный "ap" конфиг Apache

<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>
Artistan
источник
0

Просто добавьте это в один из ваших файлов system.xml (в app / code / local module):

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

Таким образом, вы можете выбрать опцию «Добавить код магазина в URL» для представления магазина.

nverhoye
источник
Вы можете выбрать его. Но вы уверены, что это на самом деле работает?
Фабиан Шменглер
Да, проверено на magento 1.9.x и magento EE 1.13.x
nverhoye
Было бы замечательно, если бы это действительно сработало, но я не смог сделать это в условиях одного веб-сайта и нескольких просмотров магазина. Проверено на CE 1.9.2.3.
Аад Матейссен
не работал для меня
Visakh B Sujathan